[英]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
. 每个对象都具有以下属性: name
, address
, ZIP_Code
。
How can I sort the NSArray
, by name
? 如何按name
对NSArray
排序?
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.