2013-10-17 82 views
1

我有一个NSmutableArray,其中有许多NSMutableDictionaries。如何使用多个objectForKey对NSMutableDictionaries的NSMutableArray进行排序

每一个的NSMutableDictionary看起来像这样

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

那么我想知道我是怎么排序几个NSDictionary的键acending值。为每个对象实例。

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排序等。我认为它被称为树排序?

任何帮助将不胜感激。

+0

请详细说明您的搜索条件.....什么应该被第一,第二和第三评价? – Mani

+0

我已经更新了一个conecpt示例。 – HurkNburkS

+0

你能解释一下你想在这里输出什么 –

回答

4

你应该尝试NSPredicateNSSortDescriptor

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

有一个很好的教程献给排序和筛选,并在目标C here数据收集类的所有这类操作打算。

+0

谢谢你的完美工作。 – HurkNburkS

2

试试这个

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

其中unsortedArray是你的NSMutableArray。

+0

好吧现在就试试看。会让你知道我怎么走..只是要清理我的coredata然后会尝试它......哈哈,我弄得一团糟。 – HurkNburkS

0

你可以试试这个...

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]; 
    }]; 
相关问题