[英]Objective C: Sort Two Dimensional Array
我有一个数组数组。 包含的数组的第一个元素都是NSDate对象。 我想按从最新到最少的顺序对包含数组的数组进行排序。 由于某种原因,下面的排序算法会导致无限循环。 谁能帮我吗? 谢谢。
最好... SL
//array is the array containing all of the other arrays(that have NSDates as their first elements)
//temp is the new array being added to the end of the array, to later be sorted into the correct position.
[array addObject:temp];
NSMutableArray *tempArray;
for (int i=0; i<[array count]; i++)
{
NSDate *session1, *session2;
session1 = [[array objectAtIndex:i] objectAtIndex:0];
session2 = [[array objectAtIndex:[array count]-1] objectAtIndex:0];
if([session1 compare:session2] == NSOrderedDescending)
{
tempArray = [array objectAtIndex:i];
[array insertObject:[array objectAtIndex:[array count]-1] atIndex:i];
[array insertObject:tempArray atIndex:[array count]-1];
}
}
这将导致无限循环,因为在每一步中,您都要在数组中插入两个以上的值。 因此,数组的增长速度比遍历数组的速度快。 我假设您打算交换值。
无论如何,一种更简单,更有效的排序方式是使用内置的排序功能:
// NSArray *sortedArray, with the unsorted 'array' pulled from some other instance
sortedArray = [array sortedArrayUsingComparator:^(id a, id b) {
return [[b objectAtIndex:0] compare:[a objectAtIndex:0]];
}];
如果array
是可变的,并且您想对其进行排序:
[array sortUsingComparator:^(id a, id b) {
return [b[0] compare:a[0]];
}];
如果array
是不可变的,或者您想让它保持不变并进行排序,则:
NSArray *sortedArray = [array sortedArrayUsingComparator:^(id a, id b) {
return [b[0] compare:a[0]];
}];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.