【问题标题】:Best way to sort an NSArray of NSDictionary objects?对 NSDictionary 对象的 NSArray 进行排序的最佳方法?
【发布时间】:2011-01-24 12:04:36
【问题描述】:

我正在努力尝试对字典数组进行排序。

我的字典有几个值,包括兴趣、价格、受欢迎程度等。

有什么建议吗?

【问题讨论】:

    标签: ios objective-c sorting nsarray nsdictionary


    【解决方案1】:

    编写一个排序函数,比较两个字典中的相关字段。例如,当您拥有此版本时,您可以使用 NSArray#sortedArrayUsingFunction:context: 对数组进行排序。

    NSArray Class Reference

    【讨论】:

      【解决方案2】:

      像这样使用NSSortDescriptor..

      NSSortDescriptor * descriptor = [[NSSortDescriptor alloc] initWithKey:@"interest" ascending:YES];
      stories = [stories sortedArrayUsingDescriptors:@[descriptor]];
      recent = [stories copy];
      

      stories 是您要排序的数组。 recent 是另一个具有排序字典值的可变数组。将 @"interest" 更改为您必须排序的键值。

      一切顺利

      【讨论】:

      • 这很好,但确实会泄漏。 1)排序描述符应该被释放或自动释放,2)不需要复制调用,该行可以被删除。
      • NSSortDescriptor *descriptor = [[[NSSortDescriptor alloc] initWithKey:@"interest" 升序:YES] autorelease]; [故事 sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
      • 可以使用 NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"interest" 升序:YES];
      • 最近 = [[stories sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]] 复制];
      • 您需要在排序调用期间存储输出: NSArray* recent = [stories sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
      【解决方案3】:
      [array sortUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"YOUR-KEY" ascending:YES], nil]];
      

      我真的不想把它分成多行。对我来说已经足够简单了。

      【讨论】:

      • NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" 升序:YES]; [resultArray1 sortUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
      【解决方案4】:

      更新,sortUsingDescriptors 现在是 sortedArrayUsingDescriptors

      所以,就像这样:

      items  = [items sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]];
      

      【讨论】:

      • 你似乎很困惑 - [NSArray sortedArrayUsingDescriptors] 和 - [NSMutableArray sortUsingDescriptors]。最新的仍然存在,没有被替换。
      【解决方案5】:

      您可以从父属性遍历到所需的子属性。例如

      NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"parent.child.child"  ascending:YES];
      

      【讨论】:

      • 你这个小明星。这帮助我对子字典进行排序。非常感谢!
      • 它没有回答问题!
      【解决方案6】:
      array = [array sortedArrayUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"YOUR-KEY" ascending:YES], nil]];
      

      记住分配给数组

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多