对NSMutable数组Ascending Order进行排序

时间:2015-02-03 20:22:21

标签: ios objective-c sorting xcode6

这里有问题。

我有一个NSMutableArray,我有以下数字:

99,
161,
178,
179,
180,
181,
182,
184,
185,
194,
195,
196,
205,
206,
210,
218,
337,  <------- Here is the 337
227,
232,
240,
244,
346,
352,
353

正如你可以看到的那样,在218和227之间有一个337.如果下一个数字小于337,我如何让337继续前进?

或者换句话说,我如何制作我的NSMutableArray Ascendent?

3 个答案:

答案 0 :(得分:0)

当没有要评估的代码时,您已经尝试过的内容以及您可能做错了什么并不是很清楚。请检查NSArray类引用,以尝试最适合您的问题的排序方法版本。还记得数组应该保存对象,在你的情况下是NSNumbers。然后您可以使用以下方法:

  

sortedArrayUsingFunction:context:返回列出的新数组   按照定义的升序接收数组的元素   比较函数比较器。

     

声明SWIFT func sortedArrayUsingFunction(_ comparator:   CFunctionPointer≤((AnyObject!                                          AnyObject!                                          UnsafeMutablePointer) - &gt; INT)&gt;中                         上下文上下文:UnsafeMutablePointer) - &gt; [AnyObject] OBJECTIVE-C    - (NSArray )sortedArrayUsingFunction :( NSInteger()(id,                                                   ID,                                                   void *))比较器                                 context:(void *)context讨论新数组包含对接收数组元素的引用,而不是   他们的副本。

     

比较函数用于一次比较两个元素   如果第一个元素小于,则应返回NSOrderedAscending   第二个,NSOrderedDescending,如果第一个元素大于   第二个,如果元素相等,则为NSOrderedSame。每一次   调用比较函数,它将上下文作为第三个传递   论点。这允许比较基于一些外部   参数,例如字符排序是区分大小写还是   不区分大小写的。

     

给定anArray(NSNumber对象的数组)和比较函数   这种类型:

     

NSInteger intSort(id num1,id num2,void * context){       int v1 = [num1 intValue];       int v2 = [num2 intValue];       if(v1&lt; v2)           返回NSOrderedAscending;       否则如果(v1&gt; v2)           返回NSOrderedDescending;       其他           返回NSOrderedSame;以这种方式创建anArray的排序版本:

     

NSArray * sortedArray; sortedArray = [anArray   sortedArrayUsingFunction:intSort context:NULL];进口声明   进口基金会

     

可用性适用于iOS 2.0及更高版本。

答案 1 :(得分:0)

您可以尝试:

NSArray *arrayOfNumbers = @[@(4), @(2), @(13), @(156), @(1), @(-2)];
NSSortDescriptor *lowestToHighest = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:YES];
arrayOfNumbers = [arrayOfNumbers sortedArrayUsingDescriptors:@[lowestToHighest]];

答案 2 :(得分:0)

执行此操作但请确保您的数组首先是NSNumbers,而不仅仅是普通的int:

[arrayOfNumbers sortedArrayUsingSelector:@selector(compare:)];