简体   繁体   English

如何使用对象对NSArray进行排序

[英]How to sort an NSArray with objects

I have a NSArray of objects. 我有一个对象的NSArray Each object has several properties. 每个对象都有几个属性。

For example: The NSArray oneArray has 5 objects. 例如: NSArray oneArray有5个对象。 Each object has the following properties: name , address , ZIP_Code . 每个对象都具有以下属性: nameaddressZIP_Code

How can I sort the NSArray , by name ? 如何按nameNSArray排序?

NSSortDescriptor* dx = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSSortDescriptor* dy = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:NO selector:@selector(caseInsensitiveCompare:)];
[arr sortUsingDescriptors:[NSArray arrayWithObjects:dx, dy, nil]];
[dx release];
[dy release];

Taken from code posted by KennyTM. 取自KennyTM发布的代码。 Edited by Jordan to actually work ;) Replace Array arr with your array. 由Jordan编辑,可实际使用;)用您的数组替换Array arr。 Modify to suit. 修改以适合。

    NSInteger nameSort(id obj1, id obj2, void *context)
    {
        NSComparisonResult result = [obj1.name compare:obj2.name];

        if (result == NSOrderedAscending) // stringOne < stringTwo
            return NSOrderedAscending;

        if (result == NSOrderedDescending) // stringOne > stringTwo
            return NSOrderedDecending;

        if (result == NSOrderedSame) // stringOne == stringTwo
            return NSOrderedSame;
    }
/*to sort oneArray*/ oneArray = [oneArray sortedArrayUsingFunction:nameSort context:NULL];

I like Jordan's answer because (1) I didn't know about NSSortDescriptor and (2) it's useful for sorting on multiple properties. 我喜欢Jordan的回答,因为(1)我对NSSortDescriptor并不了解,以及(2)对于对多个属性进行排序非常有用。

But what I usually do is create a method like -(NSComparisionResult)compare:(MyClass*)otherObject in my class, then use -[myArray sortedArrayUsingSelector:@selector(compare:)] . 但是我通常要做的是在类中创建一个-(NSComparisionResult)compare:(MyClass*)otherObject类的方法,然后使用-[myArray sortedArrayUsingSelector:@selector(compare:)] The compare method itself is similar to Jumhyn's answer, but I think is a little cleaner because the class itself compares the objects, instead of a stand-alone function. compare方法本身类似于Jumhyn的答案,但我认为它更简洁一些,因为类本身比较对象,而不是独立的函数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM