我想訪問字典存儲元素的方式。有誰能幫我做到這一點。提前致謝!!如何有序地訪問字典?
0
A
回答
3
字典將其值存儲在由鍵索引的結構中,或者更確切地說由鍵的哈希值存儲。這就是爲什麼他們很快。他們不需要搜索值,他們只需取得一個密鑰的值並直接找到值(在大多數情況下,只有在碰撞密鑰哈希值的情況下,他們必須搜索)。
所以值的保存順序是不可預測的。如果您需要訂單,您需要一個數組或鏈接列表 - 兩個結構都具有一個已定義的存儲值。
如果你同時需要:字典類型的訪問和保存順序,你將不得不尋找一個可能的開放源代碼庫與列表支持的字典或你自己的版本:採取一個字典接口,並實現它,使它得到同時保存在列表和內部字典中。
訪問器方法將轉到字典,但是您可以提供用於列表並按照添加順序返回數據的迭代器。
1
可可中沒有Ordered Dictionary。最好的辦法是創建一個自定義類,它包裝一個字典並在輸入密鑰時保存一組密鑰。這並不難。您的類很可能「掩蓋」的NSMutableDictionary
的方法是這樣的:
// innerDict is an NSMutableDictionary
// keyArray is an NSMutableArray
- (void)setObject:(id <NSCopying>)anObject forKey:(id)aKey {
[innerDict setObject:anObject forKey:aKey];
// Keys are added to the array in the order they go into the dictionary;
// users of the class can access the array to get this info
[keyArray addObject:aKey];
}
- (id)objectForKey:(id)aKey {
return [innerDict objectForKey:aKey];
}
- (void)removeObjectForKey:(id)aKey {
[innerDict removeObjectForKey:aKey];
[keyArray removeObject:aKey];
}
- (NSEnumerator *)keyEnumerator {
// It's actually better for users of this class to
// use fast enumeration on the keyArray; this is just an example
return [keyArray objectEnumerator];
}
如果你到讓你的手髒,馬特·加拉格爾有tutorial on collection subclassing,只是恰巧使用有序字典作爲例子。
相關問題
- 1. 如何訪問字典中的字典?
- 2. 訪問私有字典
- 3. 訪問字典
- 4. 如何訪問內部字典
- 5. 如何訪問字典的元素?
- 6. 如何通過my_dict.my_key訪問字典?
- 7. 如何像訪問字典一樣訪問班級數據
- 8. 如果我在字典內的字典內有字典,我將如何訪問其中的信息?
- 9. MS UNITY:如何訪問我的所有模塊的字典?
- 10. 訪問值和字典
- 11. 試圖訪問字典值
- 12. 訪問從pandas.core.series.Series字典
- 13. 訪問嵌套字典
- 14. 訪問對象爲字典
- 15. 關於訪問字典
- 16. Android:訪問系統字典
- 17. 訪問多個字典值
- 18. 訪問設備字典
- 19. 關於字典訪問
- 20. 訪問字典詞典中的元素
- 21. 在Python中訪問字典詞典
- 22. 訪問字典鍵,如果不存在
- 23. 如何使用地圖上的Python /降低有序字典
- 24. 如何遞歸迭代有序字典?
- 25. Python - 字典列表;訪問問題
- 26. 如何動態訪問django模板中的字典字段?
- 27. 我如何將字符串轉換爲訪問多維字典
- 28. 我有名單有字典的鍵。如何使用這些密鑰動態訪問字典
- 29. 如何從字典訪問字典中值的公式中使用
- 30. 訪問從字典的字符串值
我不認爲一個普通的字典類會記住插入的順序,因爲它需要額外的時間和空間,而不是一個字典的標準用例。我建議編寫你自己的字典類,它可以保存這些信息。 – Christian 2011-05-02 07:33:46
你不能通過任何SDK方法來做到這一點。 – lostInTransit 2011-05-02 07:40:24
[Objective-C字典是一個有序的容器嗎?]的可能重複(http://stackoverflow.com/questions/1648059/is-the-objective-c-dictionary-an-ordered-container) – outis 2012-02-04 10:40:26