我正在使用动态填充的NSMutableDictionary。它看起来像这样:
{
SomeKey = 6;
AnotherKey = 2;
JustAnotherKey = 28;
}
我需要对此进行排序,所以它就像这样:
{
JustAnotherKey = 28;
SomeKey = 6;
AnotherKey = 2;
}
有没有办法实现这个目标?提前谢谢。
答案 0 :(得分:4)
不,抱歉!
NSDictionary不支持对其键进行排序 - 您必须自己这样做。
从您的字典中获取keys
数组,对其进行排序,然后通过并从字典中获取值。类似的东西:
NSArray *keys = [myDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(compare:)];
NSArray *values = [NSMutableArray array];
for (id key in sortedKeys)
[values addObject:[myDictionary objectforKey:key]];
现在,值的顺序正确。
然而,这是相当多的工作;如果你想要它们排序,我会考虑将它们存储在数组中以开始?
答案 1 :(得分:1)
您可以考虑使用NSMutableArray并使用您自己的模型类填充它,而不是使用NSMutableDictionary,该模型类包含具有键字符串的属性和具有该值的属性。 NSMutableArray提供了对这些对象进行排序的方法。
这有用吗?
答案 2 :(得分:1)
字典是一个无序集合,这意味着它没有任何元素的顺序。所以即使你插入第一个对象为“一个”:“第一个值”,然后是“两个”:“第二个值“,当你遍历键时,你可能会以任意随机顺序得到它(例如:”两个“然后”一个“)。
但是,如果你想要的只是排序顺序的值,你可以迭代所有的键,获取值并将它存储在一个数组中,然后对它们进行排序。
NSArray *values=[myDict allValues];
NSMutableArray *sortedKeys=[[NSMutableArray alloc] init];
NSArray *sortedValues = [values sortedArrayUsingSelector:@selector(yourSelector)];
for (val in sortedArray){
NSString *key=(NSString*)[[myDict allKeysForObject:val] objectAtIndex:0];
[sortedKeys addObject:key]
}
这将首先获得排序顺序的值,然后是相应的键。 (它没有进行任何错误检查。所以要注意OutOfIndex异常)。
我不确定这段代码的效率有多好,因为allKeysForObject
将迭代所有的密钥。