如何使用索引從字典對象中檢索項目?例如,我有10個項目的口述對象,我必須從字典中獲得第5個密鑰對?如何從帶有索引的Dictionary對象中獲取partlin項目?
回答
字典無序。如果你的意思是「添加到詞典中的第五項」 - 它們不提供此功能。
有一兩件事要小心的是,在許多情況下Dictionary<TKey, TValue>
出現到下單 - 如果你只是添加了一堆條目,然後重複,那麼目前的實現下,我相信你會至少通常 GET以相同的順序返回對。然而,這並不能保證,這不是意味着特別發生 - 這只是一個執行的怪癖。如果刪除條目然後添加更多條目,那麼整個事情就會變成梨形。
基本上,如果您想要訂購以及密鑰查找,則需要存儲列表以及字典。
忽略了這個問題,提出了詞典的基本濫用:
int counter = 0;
foreach (var pair in yourDictionary)
{
if (++counter == 5)
{
// pair contains your fifth item
}
}
如果您使用的是通用的字典是這樣的:
Dicionary<int,string> myDict = new Dictionary<int,string>();
你可以從字典中拉第五值通過轉換輸出到列表:
string SomeString = myDict.Values.ToList()[4];
但通常你會使用字典當你更關心的是基於預定義的鍵而不是它在列表中的位置來檢索值。
第5個按哪個排序? Dictionary
類不保證任何特定的順序。如果您希望按某種特定順序進行操作,請從集合中檢索對(例如約翰建議)並對它們進行排序,然後在需要的索引處獲取KeyValuePair
。如果您需要通過廣告訂單進行訂購,請嘗試使用System.Collections.Specialized.OrderedDictionary
,然後您可以按索引直接訪問KeyValuePair
。
如果您使用的是.NET 3.5或更高版本:
var keyValuePair = d.ElementAt(4);
然而,這是在後臺使用一個枚舉和枚舉項目從字典順序不保證:
IDictionary接口允許枚舉包含的鍵和值,但它並不意味着任何特定的排序順序(From IDictionary reference on MSDN)。
這意味着您返回的元素可能與您插入的順序不一致,因此可能與您的期望不符。
System.Collections.Specialized
中有一個OrderedDictionary類,它強制排序並允許您通過Item索引器的索引來訪問。但是,這是來自前泛型時代,因此它只接受object
鍵值,因此與通用集合一樣不太友好。
我剛剛在CodeProject上找到了this article,它實現了一個泛型OrderedDictionary。我從來沒有用過這個,但它可能對你有用。
使用System.Linq的
串項= dicOBj.Keys.ElementAt(索引);
,你可以同時獲得以同樣的方式指定索引鍵和值
.NET框架有8個字典類:詞典,Hastable,ListDictionary,OrderedDictionary,SortedDictionary,排序列表,排序列表通用。在所有這些類中,可以通過鍵來檢索項目,但是隻能通過OrderedDictionary,SortedList,SortedList Generic中的索引檢索項目。如果您需要通過鍵或索引從您的字典項檢索,則必須使用以下類之一:OrderedDictionary,SortedList,SortedList Generic。 如何使用這些類你可以找到:OrderedDictionary Class,SortedList Class
- 1. 從對象獲取索引
- 2. 從ExpandableListView中獲取項目的索引
- 3. 如何從JavaScript對象獲取項目?
- 4. 從索引中獲取項目Laravel 5
- 5. 如何獲取項目的索引
- 6. 如何獲取Pandas中groupby對象中每個項目的索引?
- 7. 從VBA中的DICTIONARY中提取項目
- 8. php - 從foreach獲取項目的索引?
- 9. 如何打印索引或獲取ArrayList中項目的項目
- 10. jQuery - 從jQuery對象獲取索引中的子項
- 11. 從NSArray獲取對象的索引?
- 12. 如何從ArrayList中的對象中獲取項目值
- 13. 是否有可能從列表中的項目獲取索引?
- 14. 如何從ListView中獲取第一個可見項目/索引?
- 15. 如何從列表框中獲取項目索引
- 16. 獲取Foreach中的項目索引
- 17. 獲取數組中項目的索引
- 18. 如何從對象Laravel中獲取索引?
- 19. 如何獲取對象數組內的對象的索引?
- 20. 獲取NSMutableArray中對象的索引
- 21. 如何通過整數索引引用Dictionary <string,string>中的項目?
- 22. 如何從json對象獲取匹配元素的索引?
- 23. 如何從PHP私有對象數組中檢索項目?
- 24. 如何在Observable Collection中搜索項目並獲取其索引
- 25. 從庫項目引用項目對象
- 26. 如何獲取C#中列表中新增項目的索引?
- 27. 從SimpleXMLElement對象獲取項目
- 28. 如何從Dictionary中獲取MAX值?
- 29. 如何從TableBar中獲取Tableview中所有項目的當前項目的索引
- 30. 如何獲取數組中的項目的索引?
Thnx。我正在深入閱讀你的C#,這真是太神奇了。你有沒有任何與C#4.0相關的新版本。 對於ElementAt方法呢,如果字典的順序被定義了,有時候我不能得到密鑰,那麼使用這種方法是否是個不錯的主意? – 2010-07-22 05:37:24
梨的形狀與字典條目的順序有什麼關係? – Gabe 2010-07-22 05:52:11
@Kishore:很高興你在享受它。是的,我現在正在研究第二版 - 它應該很快就會出來。請參閱http://manning.com/skeet2。如果你使用'ElementAt',你會得到*一個*條目(假設你傳入了一個有效的索引),但是不能保證它會是什麼條目。 – 2010-07-22 06:00:33