我有一个
NSDictionary* dict = [[NSDictionary alloc]initWithObjectsAndKeys::arrayOne,@"Plants",arrayTwo,@"Animals"),arrayThree,@"Birds",nil];`
self.displayArray =[[dict allKeys] sortedArrayUsingSelector:@selector(compare:)];
一切正常,我能够看到表中的所有键值/对,但它们按排序顺序排列。即动物,鸟类,植物。
但我想展示植物,动物,鸟类。
有人能告诉我如何按照自定义顺序对数组进行排序吗? 我用google搜索,发现我们可以使用NSSortDescriptor进行排序。但我对此并不十分清楚。任何人都可以帮助我吗?
答案 0 :(得分:1)
你走在正确的轨道上,西里尔。
以下是Apple documentation on "Creating and using Sort Descriptors"
基本上你需要子类化NSSortDescriptor并在你的子类中实现你自己的“compare:”方法(实际上你可以命名它想要的任何东西;它需要返回一个“NSComparisonResult
”),它在某种程度上逻辑上返回“植物“在”动物之前“。
答案 1 :(得分: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