这里有问题。
我有一个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?
答案 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:)];