我的数组有以下内容:
{
"4eb57e72c7e24c014f000000" : {
"_id" : {
"$id" : "4eb57e72c7e24c014f000000"
},
"author" : "tim",
"comments" : [],
"created": {
"sec" : 1320517234,
"used" : 856000
},
"picture" : "http://someurl.com",
"text" : "this is a test",
"title" : "test",
"type" : ["test"]
}
我想按创建的排序(秒值)
这就是我拥有的......我只是不知道sortedArrayUsingFunction是如何工作的。我的意思是我在比较函数中比较什么?
jokesArray = [unSortedContentArray sortedArrayUsingFunction:Sort_Created_Comparer context:self];
NSInteger Sort_Created_Comparer(id num1, id num2, void *context)
{
int v1 = [num1 getSecFromJSONValue];
int v2 = [num2 getSecFromJSONValue];
if (v1 < v2)
return NSOrderedAscending;
else if (v1 > v2)
return NSOrderedDescending;
else
return NSOrderedSame;
}
答案 0 :(得分:1)
num1
和num2
是数组的2个元素,上下文是一个对象,您可以将其传递给函数以帮助您进行排序。
您的函数将在数组上多次调用,并且排序结果将以新数组的形式返回给您。
这是你想知道的吗?
答案 1 :(得分:0)
调用比较函数以从NSArray一次比较两个值。这就是排序的完成方式。
答案 2 :(得分:0)
比较功能是告诉排序算法您希望对象如何排序的方式。没有它,它无法知道最终的顺序应该是什么。
在您的示例代码中,参数名称num1
和num2
非常具有误导性。它们会更准确地命名为object1
和object2
。如果object1
出现在object2
之前,则返回NSOrderedAscending
。如果它应该在NSOrderedDescending
之后出现,否则返回NSOrderedSame
。
为了说明,这里有一个按年龄(从最低到最高)对假设Person
个对象进行排序的示例。
NSInteger youngest_first(id object1, id object2, void *context) {
if (object1.age < object2.age) {
return NSOrderedAscending;
}
else if (object1.age > object2.age) {
return NSOrderedDescending;
}
else {
return NSOrderedSame;
}
}
请注意,我甚至没有使用context参数,因为我的对象本身有足够的信息来确定顺序。
如果我想让它们按降序高度排序,那么我可以通过以下内容:
NSInteger tallest_first(id object1, id object2, void *context) {
if (object1.height > object2.height) {
return NSOrderedAscending;
}
else if (object1.height < object2.height) {
return NSOrderedDescending;
}
else {
return NSOrderedSame;
}
}
非常重要的一件事是,如果参数以其他顺序传递,则函数应返回一致的结果。例如,如果tallest_first(adam, joe, NULL)
返回NSOrderedDescending
,则tallest_first(joe, adam, NULL)
应返回NSOrderedAscending
。如果不是,你的比较功能就会自相矛盾。