如何使用NSPredicate对NSStrings的NSArray进行排序?

时间:2014-07-07 11:58:32

标签: ios objective-c arrays nspredicate

NSarray包含动物列表。该数组包含具有重复元素的动物列表。我必须在数组中创建一个具有不同值的数组。 应使用NSPredicate删除重复值。

这是我的代码: -

NSArray *arrAnimals = [[NSArray alloc] initWithObjects:@"Cat",@"Rat",@"Fish",@"Cat",@"Fish",@"Cat",@"Cat",@"Bird",@"Fish",@"Cat",@"Frog", nil];

NSPredicate *predicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"distinct"]];
arrAnimals = [arrAnimals filteredArrayUsingPredicate:predicate];

我在这里使用" distinct"用于排序数组的关键字,但无法找到任何解决方案。 我更喜欢很多链接。

http://www.infragistics.com/community/blogs/stevez/archive/2013/10/21/ios-objective-c-filtering-a-nsarray-using-nspredicate.aspx

请解决我的问题。

3 个答案:

答案 0 :(得分:2)

没有谓词,但您可以使用键值运算符:

distinct = [array valueForKeyPath:@"@distinctUnionOfObjects.self"];

答案 1 :(得分:1)

您可以通过创建包含其对象的集合并将其转换回数组来从数组中删除重复项。

NSArray *arrAnimals = [[NSArray alloc] initWithObjects:@"Cat",@"Rat",@"Fish",@"Cat",@"Fish",@"Cat",@"Cat",@"Bird",@"Fish",@"Cat",@"Frog", nil];
NSArray *arrayWithoutDuplicates = [[NSSet setWithArray:arrAnimals] allObjects];

答案 2 :(得分:0)

在@iMartin

的回答下试试这个
 NSArray *arrAnimals = @[@"Cat",@"Rat",@"Fish",@"Cat",@"Fish",@"Cat",@"Cat",@"Bird",@"Fish",@"Cat",@"Frog"];

    arrAnimals= [arrAnimals valueForKeyPath:@"@distinctUnionOfObjects.self"];

    arrAnimals= [arrAnimals sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        unichar firstChar =  [obj1 characterAtIndex:0];
        unichar secondChar =  [obj2 characterAtIndex:0];

        if ( firstChar == secondChar) {
            return NSOrderedSame;
        } else {
            if ( firstChar > secondChar) {
                return NSOrderedDescending;
            } else {
                return NSOrderedAscending;
            }

        }

    }];