我有NSArray
个对象。每个对象都有几个属性。
例如:
NSArray oneArray
有5个对象。每个对象都具有以下属性:name
,address
,ZIP_Code
。
如何按NSArray
对name
进行排序?
答案 0 :(得分:4)
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];
取自KennyTM发布的代码。由Jordan编辑实际工作;)将Array arr替换为您的阵列。修改以适应。
答案 1 :(得分:1)
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];
答案 2 :(得分:1)
我喜欢Jordan的答案,因为(1)我不知道NSSortDescriptor和(2)它对多个属性的排序很有用。
但我通常在我的班级中创建类似-(NSComparisionResult)compare:(MyClass*)otherObject
的方法,然后使用-[myArray sortedArrayUsingSelector:@selector(compare:)]
。比较方法本身类似于Jumhyn的答案,但我认为它更清晰,因为类本身比较了对象,而不是独立的函数。