【问题标题】:Sort NSDates inside NSDictionary inside NSArray?在 NSArray 中的 NSDictionary 中对 NSDates 进行排序?
【发布时间】:2012-05-19 19:49:44
【问题描述】:

目前在我的应用程序中,我有一个从 NSUserDefaults 加载的 NSArray。 NSArray 中的每个对象都是一个 NSDictionary,它有大约 5 个不同的键。我根据其中的 NSDates 重新排序 NSDictionarys 本身。我不想单独对 NSDates 进行排序。

我已尝试使用此代码来执行此操作:

NSComparator sortByDate = ^(id dict1, id dict2) {
        NSDate* n1 = [dict1 objectForKey:@"Date"];
        NSDate* n2 = [dict2 objectForKey:@"Date"];
        return (NSComparisonResult)[n1 compare:n2];
    };
    [self.cellArray sortUsingComparator:sortByDate];

尽管代码被执行,但什么也没有发生。我对如何根据其中的内容重新排序 NSDictionarys 感到困惑。

任何人都可以对此提供任何见解吗?

谢谢!

【问题讨论】:

  • 能否给我们一个排序前后的 NSLog 输出?
  • @RyanPoolos 我这样做后正在刷新 UITableView,所以无论如何我肯定会看到所做的任何更改。我的代码是否有问题无法正常工作?
  • 也可以尝试 NSLoging 你的 n1 和 n2 并确保它们是正确提取的有效日期对象。
  • 您的代码对我来说看起来不错。以为你不需要(NSComparisonResult)
  • 嗯,这很奇怪,尽管它似乎是倒退的,但它以某种方式被修复了。它把旧日期放在第一位,新日期放在最后,有什么办法可以解决这个问题吗?

标签: ios sorting nsdate nsdictionary


【解决方案1】:

您可以尝试对其进行内联排序,但我怀疑这会产生任何重大影响。但我可以说我从不抽象出我的积木。我肯定也会尝试 NSLogging 以确保您获得有效的 NSDates。

    [cells sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        NSDate *n1 = [obj1 objectForKey:@"Date"];
        NSDate *n2 = [obj2 objectForKey:@"Date"];

        if (n1 > n2) {
            return NSOrderedAscending;
        } else (n1 < n2) {
            return NSOrderedDescending;
        } else {
            return NSOrderedSame;
        }

    }];

【讨论】:

  • 只需反转您的运营商或您的回报以获得您想要的订单:)
  • 感谢您到目前为止的帮助。但是,我对首次订购的最新日期感到困惑。这是我唯一想要的顺序。我对您为什么使用 if 和 else 感到有些困惑。没有办法编辑这条线来做我想做的事吗?返回 (NSComparisonResult)[n1 比较:n2];
  • if 语句完成了这项工作。如果 n1 大于 n2,则在 n2 之前返回 n1。否则它在 n1 之前返回 n2。 NSDates 只是 int 表示自 1970 年以来的秒数。所以简单的大于小于运算符将确定哪个更旧。
  • 感谢您的解释!我会接受答案,但对我来说似乎有一个更深层次的问题,不确定你是否会帮助我:P 但似乎我的 NSArray 得到了正确排序,我在 UITableView 上调用了 reloadData 但是我的单元格都没有重新排序NSArray 的命令是什么。有什么想法吗?
  • 我需要查看更多代码。让我看看你的 tableview 数据源代码。如果我无法弄清楚,可能值得开始一个新问题以吸引更多答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多