我如何sorting一个NSMutablearrays与NSNumbers呢?

我试图做一个高分表,并在目标c(实际上,总的来说目标c是挑战我)吸arrays,所以我不知道如何sorting。 我试图做这样的事情(sp​​eudocode,我正在写这个动作的风格,因为我更舒服):

highscores.addObjecttoArray(score) highscores.sort(ascending) 

但我无法弄清楚…我已经看到了其他线程,但他们使用plist文件和东西,我不知道足够的目标C向他们学习。

你想做那个简短的方法吗?

如果你有一个可变的NSNumber实例数组:

 NSSortDescriptor *highestToLowest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO]; [mutableArrayOfNumbers sortUsingDescriptors:[NSArray arrayWithObject:highestToLowest]]; 

好,易于 :)

您也可以使用不可变数组上的描述符执行类似的sorting,但是最终会得到一个副本,而不是就地sorting。

[highscores sortUsingSelector:@selector(compare:)];

应该工作,如果他们绝对是所有的NSNumber s。

(添加一个对象是:

[highscores addObject:score];

如果你想sorting(最高优先):

10.6 / iOS 4:

 [highscores sortUsingComparator:^(id obj1, id obj2) { if (obj1 > obj2) return NSOrderedAscending; else if (obj1 < obj2) return NSOrderedDescending; return NSOrderedSame; }]; 

否则,您可以定义一个类别方法,例如:

 @interface NSNumber (CustomSorting) - (NSComparisonResult)reverseCompare:(NSNumber *)otherNumber; @end @implementation NSMutableArray (CustomSorting) - (NSComparisonResult)reverseCompare:(NSNumber *)otherNumber { return [otherNumber compare:self]; } @end 

并称之为:

[highscores sortUsingSelector:@selector(reverseCompare:)];

我尝试了由ohhorob提供的答案,但对象仍然按字母顺序sorting。 然后我碰到另一个答案( https://stackoverflow.com/a/4550451/823356 ):

我改变了我的NSSortDescriptor,它现在sorting数字。

 NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"score" ascending:YES comparator:^(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]; 

我只是以为我会把它放在这里,因为它解决了我的'字母sorting的NSNumbers'问题

距离是一个关键,它的价值链接(浮动或双)

 NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"distance" ascending:YES comparator:^(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]; NSArray *myArray = [NSArray arrayWithArray:arraySubCat]; myArray=[myArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor,nil]]; arraySubCat = [myArray copy]; 

所有这一切都值得,这里是另一个速记方法:

 NSArray* n = @[@8, @3, @1, @12, @16, @7, @0, @5]; NSArray* asc = [n sortedArrayUsingComparator:^NSComparisonResult(NSNumber* n1, NSNumber* n2) { return [n1 compare:n2]; }]; NSLog(@"Ascending: %@", asc); NSArray* dec = [n sortedArrayUsingComparator:^NSComparisonResult(NSNumber* n1, NSNumber* n2) { return [n2 compare:n1]; }]; NSLog(@"Descending: %@", dec); 

此代码将按升序对NSNumber的NSMutableArray进行sorting:

 [tempRA sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2]; }]; 

这段代码将按降序对NSNumber的NSMutableArray进行sorting:

 [tempRA sortUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2] * -1; // reverse the enum }]; 

代码使用这样一个事实,即NSNumber compare:方法返回范围从-1到1的NSComparisonResult。将比较结果乘以-1反转结果,从而反转sorting以降序排列。

降序

 NSArray *DescendingArray = [MinMaxArray sortedArrayUsingDescriptors: @[[NSSortDescriptor sortDescriptorWithKey:@"doubleValue" ascending:NO]]]; 

对于升序

 NSArray *AscendingArray = [MinMaxArray sortedArrayUsingDescriptors: @[[NSSortDescriptor sortDescriptorWithKey:@"doubleValue" ascending:YES]]];