我正在尝试对NSDictionaries的mutableArray进行排序,目前我可以通过对一个objectForKey值进行排序来做到这一点,但是问题是这些值中的很多可以相同,因此我需要另一个objectForKey来对数组进行排序。我想知道,如果第一个objectForKey比较返回一个相同的值,然后又如何移动到第二个objectForKey比较,依此类推。
目前,我正在执行此操作,该方法可以正常工作,但是显然只能使用一个键。
[dataArrayOfDictionaries sortUsingComparator:^ NSComparisonResult(NSDictionary *d1, NSDictionary *d2)
{
NSString *n1 = [d1 objectForKey:@"DESCRIPTION"];
NSString *n2 = [d2 objectForKey:@"DESCRIPTION"];
return [n1 localizedCompare:n2];
} ];
在调查中,我已经尝试过-
[dataArrayOfDictionaries sortUsingComparator:^ NSComparisonResult(NSDictionary *d1, NSDictionary *d2)
{
NSString *n1 = [d1 objectForKey:@"DESCRIPTION"];
NSString *n2 = [d2 objectForKey:@"DESCRIPTION"];
return [n1 localizedCompare:n2];
n1 = [d1 objectForKey:@"ID"];
n2 = [d2 objectForKey:@"ID"];
return [n1 localizedCompare:n2];
} ];
但是,这是行不通的,因为它对描述进行排序,然后完全根据ID重新排序,我想要它,如果描述键相同,然后按ID密钥对这些值进行排序..如果不起作用,则在列表的下方直到排序的键..我希望这是合理的..任何帮助将不胜感激。
最佳答案
您几乎在问题中描述了解决方案:“如果Description键相同,然后按ID键对这些值进行排序”。您可以将英语句子直接翻译为代码:
[dataArrayOfDictionaries sortUsingComparator:^ NSComparisonResult(NSDictionary *d1, NSDictionary *d2) {
NSString *n1 = [d1 objectForKey:@"DESCRIPTION"];
NSString *n2 = [d2 objectForKey:@"DESCRIPTION"];
NSComparisonResult result = [n1 localizedCompare:n2];
if (result == NSOrderedSame) {
n1 = [d1 objectForKey:@"ID"];
n2 = [d2 objectForKey:@"ID"];
result = [n1 localizedCompare:n2];
}
return result;
}];
您还可以使用两个
NSSortDescriptor
对象执行排序:[dataArrayOfDictionaries sortUsingDescriptors:[NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"DESCRIPTION" ascending:YES
selector:@selector(localizedCompare:)],
[NSSortDescriptor sortDescriptorWithKey:@"ID" ascending:YES
selector:@selector(localizedCompare:)],
nil]];