【问题标题】:How to sort an NSMutableArray of NSMutableDictionaries using mutiple objectForKey如何使用多个 objectForKey 对 NSMutableDictionary 的 NSMutableArray 进行排序
【发布时间】:2013-10-17 09:09:39
【问题描述】:

我有一个 NSmutableArray,里面有几十个 NSMutableDictionaries。

每个 NSMutableDictionary 看起来都像这样

insComp = F;
insFlow = "suVE";
inID = "SJF42B";
ID = 10000038;

然后我想知道如何通过几个 NSDictionary 键对升序值进行排序。每个对象实例。

insComp > inID > ID

例如,不使用相同的键或值

-- obj1
var1 = A
var2 = A

-- obj2
var1 = A
var2 = B

-- obj3
var1 = B
var2 = A

-- obj4
var1 = C
var2 = A

因此首先按 var1 排序,然后对每个 var1-var2 进行排序,依此类推。我认为它被称为树排序?

任何帮助将不胜感激。

【问题讨论】:

  • 请详细说明您的搜索条件.....应该评估第一、第二和第三?
  • 我已经更新了一个 conecpt 示例。
  • 你能在这里解释一下你想要什么输出

标签: ios objective-c nsmutablearray nsmutabledictionary


【解决方案1】:

您应该尝试使用 NSPredicateNSSortDescriptor

NSArray *sortedArray = [yourArray sortedArrayUsingDescriptors:
                           @[[NSSortDescriptor 
                             sortDescriptorWithKey:@"insComp" ascending:YES], 
                             [NSSortDescriptor
                             sortDescriptorWithKey:@"Id" ascending:YES]]];

在目标 c here 中有一个很好的教程,专门用于对数据收集类进行排序和过滤以及所有此类操作。

【讨论】:

    【解决方案2】:

    试试这个

     NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey@"insComp" ascending:NO], [NSSortDescriptor sortDescriptorWithKey@"inID" ascending:NO],[NSSortDescriptor sortDescriptorWithKey@"ID" ascending:NO], nil]];
    

    unsortedArray 是你的 NSMutableArray。

    【讨论】:

    • 好的,现在就试试这个。会让你知道我怎么走.. 只需清理我的核心数据,然后尝试一下......哈哈,我弄得一团糟。
    【解决方案3】:

    你可以试试这个……

     NSArray *firstSort = nil;
        firstSort = [beforeSort sortedArrayUsingComparator:^NSComparisonResult(id firstObj, id secondObj) {
            NSString *first = nil, *second = nil;
            first = [((NSDictionary*)firstObj) objectForKey:@"Var1"];
            second = [((NSDictionary*)secondObj) objectForKey:@"Var1"];
            return [first compare:second];
        }];
        NSArray *secondSort = [firstSort sortedArrayUsingComparator:^NSComparisonResult(id firstObj, id secondObj) {
            NSString *first = nil, *second = nil;
            first = [((NSDictionary*)firstObj) objectForKey:@"Var2"];
            second = [((NSDictionary*)secondObj) objectForKey:@"Var2"];
            return [first compare:second];
        }];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 2011-06-01
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      相关资源
      最近更新 更多