按字母顺序排序NSMutableArrays

时间:2012-11-21 17:19:19

标签: objective-c ios

我有一个名为categories的NSMutableArray,它包含一个名为CategoryItem的对象。 CategoryItem有一个NSString属性,* text。现在,我将如何根据元素的text属性对此数组进行排序?对不起,如果这没有意义,我对这一切都是新手。

我试过了:

[categories sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)];

但它失败了。

4 个答案:

答案 0 :(得分:10)

那是因为您尝试根据每个对象对数组进行排序,而不是根据它包含的字符串进行排序。

您需要使用NSSortDescriptor实例对数组进行排序。你可以创建一个这样的:

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"text" ascending:YES];

然后:

[categories sortUsingDescriptors:[NSArray arrayWithObject:descriptor]];

答案 1 :(得分:7)

试试这个:

[categories sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    CategoryItem object1 = (CategoryItem)obj1;
    CategoryItem object2 = (CategoryItem)obj2;
    return [object1.text compare:object2.text];
}];

希望有所帮助!

答案 2 :(得分:4)

它失败了,因为你没有为CategoryItem实现localizedCaseInsensitiveCompare。

如果您想这样做,请为CategoryItem实现该功能,如

- (NSComparisonResult)localizedCaseInsensitiveCompare:(CategoryItem *)anItem
{
    return [anItem.stringProperty localizedCaseInsensitiveCompare:self.stringProperty];
}

答案 3 :(得分:2)

你有点做对了。

问题是你正在尝试排序字符串,但是你没有字符串,你有CategoryItems。要保留相同的代码,您只需为CategoryItem实现localizedCaseInsensitiveCompare:。在该函数中,比较文本值并返回正确的NSComparisonResult。可能是这样的

-(NSComparisonResult)localizedCaseInsensitiveCompare:(CategoryItem *)item2 {
    return [text localizedCaseInsensitiveCompare:[item2 text]];
}