2010-07-22 27 views

回答

5

字典無序。如果你的意思是「添加到詞典中的第五項」 - 它們不提供此功能。

有一兩件事要小心的是,在許多情況下Dictionary<TKey, TValue>出現到下單 - 如果你只是添加了一堆條目,然後重複,那麼目前的實現下,我相信你會至少通常 GET以相同的順序返回對。然而,這並不能保證,這不是意味着特別發生 - 這只是一個執行的怪癖。如果刪除條目然後添加更多條目,那麼整個事情就會變成梨形。

基本上,如果您想要訂購以及密鑰查找,則需要存儲列表以及字典。

+0

Thnx。我正在深入閱讀你的C#,這真是太神奇了。你有沒有任何與C#4.0相關的新版本。 對於ElementAt方法呢,如果字典的順序被定義了,有時候我不能得到密鑰,那麼使用這種方法是否是個不錯的主意? – 2010-07-22 05:37:24

+0

梨的形狀與字典條目的順序有什麼關係? – Gabe 2010-07-22 05:52:11

+1

@Kishore:很高興你在享受它。是的,我現在正在研究第二版 - 它應該很快就會出來。請參閱http://manning.com/skeet2。如果你使用'ElementAt',你會得到*一個*條目(假設你傳入了一個有效的索引),但是不能保證它會是什麼條目。 – 2010-07-22 06:00:33

0

忽略了這個問題,提出了詞典的基本濫用:

int counter = 0; 
foreach (var pair in yourDictionary) 
{ 
    if (++counter == 5) 
    { 
     // pair contains your fifth item 
    } 
} 
0

如果您使用的是通用的字典是這樣的:

Dicionary<int,string> myDict = new Dictionary<int,string>(); 

你可以從字典中拉第五值通過轉換輸出到列表:

string SomeString = myDict.Values.ToList()[4]; 

但通常你會使用字典當你更關心的是基於預定義的鍵而不是它在列表中的位置來檢索值。

0

第5個按哪個排序? Dictionary類不保證任何特定的順序。如果您希望按某種特定順序進行操作,請從集合中檢索對(例如約翰建議)並對它們進行排序,然後在需要的索引處獲取KeyValuePair。如果您需要通過廣告訂單進行訂購,請嘗試使用System.Collections.Specialized.OrderedDictionary,然後您可以按索引直接訪問KeyValuePair

3

如果您使用的是.NET 3.5或更高版本:

var keyValuePair = d.ElementAt(4);

然而,這是在後臺使用一個枚舉和枚舉項目從字典順序不保證:

IDictionary接口允許枚舉包含的鍵和值,但它並不意味着任何特定的排序順序(From IDictionary reference on MSDN)

這意味着您返回的元素可能與您插入的順序不一致,因此可能與您的期望不符。

System.Collections.Specialized中有一個OrderedDictionary類,它強制排序並允許您通過Item索引器的索引來訪問。但是,這是來自前泛型時代,因此它只接受object鍵值,因此與通用集合一樣不太友好。

我剛剛在CodeProject上找到了this article,它實現了一個泛型OrderedDictionary。我從來沒有用過這個,但它可能對你有用。

-1

使用System.Linq的

串項= dicOBj.Keys.ElementAt(索引);

,你可以同時獲得以同樣的方式指定索引鍵和值

0

.NET框架有8個字典類:詞典,Hastable,ListDictionary,OrderedDictionary,SortedDictionary,排序列表,排序列表通用。在所有這些類中,可以通過鍵來檢索項目,但是隻能通過OrderedDictionary,SortedList,SortedList Generic中的索引檢索項目。如果您需要通過鍵或索引從您的字典項檢索,則必須使用以下類之一:OrderedDictionary,SortedList,SortedList Generic。 如何使用這些類你可以找到:OrderedDictionary ClassSortedList Class

相關問題