我正在尝试编写一个方法,允许我在将NSMutableDictionary
密钥插入数据结构时保持其顺序。我知道哈希映射的NSMutableDictionary
工作,因此没有维持特定的顺序。
所以我需要以某种方式跟踪插入到字典中的键,并且当从字典中检索值时,将按照与最初插入时相同的顺序打印键(键值)。插入字典中的键是字母数字。它们只需按照插入NSMutableDictionary
时的相同顺序打印出来。
这可以实现吗?我想继续使用NSDictionary
数据结构。
答案 0 :(得分:3)
NSDictionary
(以及它的所有关系)都是无序的集合,所以“保持其顺序”是没有意义的,因为没有顺序。
如果您想要按特定顺序检索对象,则需要使用NSArray
。 (或NSOrderedSet
如果哈希的唯一性很重要。)
简单而天真的选择
如果您有字典结构......
{
key1:value1,
key2:value2,
key3:value3,
//and so on
}
然后你可能会更好地使用......
[
{
key1:value1
},
{
key2:value2
},
{
key3:value3
}
]
// i.e. an array of dictionaries
更多代码,但更好的选择
或者您可以创建一个新的集合类作为NSObject
的子类。
在课堂上你可以有类似......
- (void)addObject:(id)object forKey:(id)key
{
self.dictionary[key] = object;
[self.array addObject:key];
}
和...
- (id)objectForKey:(key
{
return self.dictionary[key];
}
和...
- (id)objectAtIndex:(NSUInteger)index
{
return self.dictionary[self.array[index]];
}
甚至......
- (void)removeObjectForKey:(id)key
{
[self.dictionary removeObjectForKey:key];
[self.array removeObject:key];
}
你甚至可以使它符合快速枚举,这样你就可以......
for (id object in mySuperSpecialCollection) {
}
并按照数组的顺序分配对象。
答案 1 :(得分:2)
这可以实现吗?我想继续使用NSDictionary数据结构。
没有。使用NSDictionary
的实例时,实际的类是私有的。与类集群一样,它不可能继承NSDictionary
并使用派生功能(存储键值对)。
最好的方法是设置自己的数据结构,可以结合使用NSOrderedSet
和NSDictionary
。