1

我有一个

NSDictionary* dict = [[NSDictionary alloc]initWithObjectsAndKeys::arrayOne,@"Plants",arrayTwo,@"Animals"),arrayThree,@"Birds",nil];`

self.displayArray =[[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];

一切正常,我可以看到表中的所有键值/对,但它们是按排序顺序排列的。即动物、鸟类、植物。

但我想显示为植物、动物、鸟类。

谁能告诉我如何按我的自定义顺序对数组进行排序?我用谷歌搜索,发现我们可以使用 NSSortDescriptor 进行排序。但我对此不是很清楚。谁能帮我 ?

4

2 回答 2

1

你在正确的轨道上,西里尔。

这是有关“创建和使用排序描述符”的一些 Apple 文档

基本上,您需要继承 NSSortDescriptor 并在您的子类中实现您自己的“比较:”方法(您实际上可以将其命名为您想要的任何名称;它需要返回一个“ NSComparisonResult”),它以某种方式在“动物”之前以某种方式在逻辑上返回“植物”。

于 2012-05-24T09:28:18.740 回答
1

由于您的排序不遵循任何自然顺序,一个简单的解决方案可能是使用另一个数组跟踪订单

NSArray *array1 = [NSArray arrayWithObjects:@"rose",@"orchid",@"sunflower",nil];
NSArray *array2 = [NSArray arrayWithObjects:@"dog", @"cat",@"ogre",@"wookie", nil];
NSArray *array3 = [NSArray arrayWithObjects:@"parrot",@"canary bird",@"tweety",@"bibo",nil];


NSArray *keys = [NSArray arrayWithObjects:@"Plants",@"Animals",@"Birds", nil];

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                                    array1,[keys objectAtIndex:0],
                                    array2,[keys objectAtIndex:1], 
                                    array3,[keys objectAtIndex:2], 
                          nil];

for (NSString *key in keys) {
    NSLog(@"%@ %@", key, [dict objectForKey:key]);
}

Matt 在他精彩的博客中展示了如何创建有序字典,它基本上使用另一个数组来保持顺序,就像我在这里展示的那样:OrderedDictionary: Subclassing a Cocoa class cluster

于 2012-05-24T09:38:40.100 回答