如何使用不同的排序函数对NSArray进行排序

时间:2013-05-01 02:00:07

标签: objective-c sorting nsarray nsdictionary

我有一个NSArray NSDictionaries,我在其NSArray中的一个元素中创建NSStrings NSDictionary

然后我试图对两者进行排序,但我得到的结果略有不同。

NSDictionary很简单

NAME
Number

我是第一个NSArray并使用字典的 NAME 元素创建新的NSArray

然后我按照这个

排序第一个数组
NSSortDescriptor * descriptor = [[NSSortDescriptor alloc] initWithKey:@"NAME" ascending:YES]; // 1
sortedByNameArray = [dataArrayOfDictionaries sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

然后我接受第二个数组,这是第一个排序之前完全相同的顺序,并按照这个排序

// sorts nicknames
newSortedArray = [nameOnlyArray sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

虽然两个数组都按字母顺序排序localizedCaseInsensitiveCompare:似乎可以很好地排序,因为我的其他sortedArrayUsingDescriptors:似乎只使用第一个字母进行排序,因此它没有真正排序。

我想帮助将localizedCaseInsensitiveCompare应用于NSArray词典..但我不知道如何做到这一点,因为你必须访问里面每个NSDictionary的NAME元素第一个NSArray

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

要在第一种情况下与localizedCaseInsensitiveCompare进行比较,请使用

NSSortDescriptor * descriptor = [[NSSortDescriptor alloc] initWithKey:@"NAME" 
    ascending:YES 
    selector:@selector(localizedCaseInsensitiveCompare:)];