2011-03-31 133 views
5

我有一个NSMutableDictionaries数组,其中包含(除其他外)关键位置。 我需要对数组进行排序以将其输入到表中。最上面应该是N,下面应该是A,下面应该是R. 所以在排序中:我如何按以下顺序对数组排序:N - A - R?Obj/C:按照自定义顺序对数组进行排序

编辑:我可以通过看两个变量的顺序,但我使用超过2个变量(总共7)...

感谢,

回答

6

如果阵列是可变的,你可以使用-sortUsing ...方法对其进行排序。如果没有,您可以使用-sortedArrayUsing ...方法创建一个新的排序数组。例如,有-sortUsingComparator:和-sortedArrayUsingComparator:方法将比较块作为参数。你只需要提供一个比较使用自定义排序次序的两个对象,这样的块:

[myArray sortUsingComparator:^(id firstObject, id secondObject) { 
    NSString *firstKey = [firstObject valueForKey:@"location"]; 
    NSString *secondKey = [secondObject valueForKey:@"location"]; 
    if ([firstKey stringEqual:@"N"] || [lastKey stringEqual:@"R"]) 
     return NSOrderedAscending; 
    else if ([firstKey stringEqual:secondKey]) 
     return NSOrderedSame; 
    else 
     return NSOrderedDescending; 
}]; 

有数组排序,结合实例,该Collections Programming Topics文档中的一个非常深入的讨论。

+0

@Caleb谢谢Caleb,这帮了我一点。我仍在努力排序更多地点,N出现在顶部,但下面的所有字母一起出现,但随机排序。我的总位置列表应该是N-G-B-A-F-C。例如,所有的A都在一起,但不是直接在B之下。排序的顺序是N-B-C-F-A-G。我正在使用你多次使用的块,也许有什么地方出现错误...? – Joetjah 2011-03-31 10:23:36

+0

@Caleb ofcourse,多次使用此块将无法正常工作(并随机游走)。没有足够的思考,发表以前的评论太快。虽然,使用两个键对我有用,但使用多于两个(我需要)是我奋斗的地方。有什么建议么? – Joetjah 2011-03-31 10:30:39

+0

@Joetjah,我不确定你多次使用该块的含义。我不一定建议使用这些代码,尤其是如果你不仅仅是你最初指出的三个值。我真的只是举一个快速而肮脏的例子。更好的方式去更多的价值可能是定义为一个字符串的顺序:@“NBCFAG”。然后你可以找到字符串中每个字典的位置值并比较它们的索引。这比更大数量的可能值要好得多。 – Caleb 2011-03-31 10:37:20

相关问题