当我在NSMutableDictionary
中添加值时,它会自动设置Key。如何禁用它并按照第一组和第二组排列。
NSMutableDictionary* filteredDictionary = [NSMutableDictionary dictionary];
[filteredDictionary setObject:@"abc" forKey:@"1"];
[filteredDictionary setObject:@"abc" forKey:@"3"];
[filteredDictionary setObject:@"abc" forKey:@"2"];
[filteredDictionary setObject:@"abc" forKey:@"5"];
[filteredDictionary setObject:@"abc" forKey:@"4"];
NSLog(@"%@",filteredDictionary);
current output:
{
1 = abc;
2 = abc;
3 = abc;
4 = abc;
5 = abc;
}
but i want
{
1 = abc;
3 = abc;
2 = abc;
5 = abc;
4 = abc;
}
有没有办法按密钥禁用排序?
答案 0 :(得分:4)
NSDictionary
没有对你的键进行排序,字典中键的顺序未定义,因为它是一个无序的集合。
这意味着您在获取/打印元素时无法信任元素的顺序,除非您在获取元素时使用keysSortedByValueUsingSelector:
或keysSortedByValueUsingComparator:
对它们进行排序。
您也可以在allKeys;
的手册中看到这一点返回值
包含字典键的新数组,如果是,则为空数组 字典没有条目。讨论
数组中元素的顺序是未定义。
无法在NSDictionary
中按顺序保存键/值,因此如果您需要按照添加它们的顺序排序,则基本上有两个选项;
NSArray
中删除 - 同时将它们添加到NSDictionary
,然后使用 集合对于有序访问。keysSortedByValueUsingComparator:
的字段对其进行排序。答案 1 :(得分:2)
这是一种方法:
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"key" ascending:YES comparator:^(id obj1, id obj2) {
if (obj1 > obj2) {
return (NSComparisonResult)NSOrderedDescending;
}
if (obj1 < obj2) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;
}];
NSArray *sortedKeys = [[filteredDictionary allKeys] sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
NSMutableDictionary *orderedDictionary = [NSMutableDictionary dictionary];
for (NSString *index in sortedKeys) {
[orderedDictionary setObject:[filteredDictionary objectForKey:index] forKey:index];
}
filteredDictionary = orderedDictionary;
答案 2 :(得分:1)
NSDictionary
无意排序。您可以通过使用allKeys
获取所有密钥并根据自己的喜好对该数组进行排序来对其进行排序。然后循环遍历此数组并获取相应的值。
答案 3 :(得分:1)
在NSDictionary
中,您无法在插入时获取数据
如果要根据要插入的数据获取数据,可以使用数组