2012-11-28 97 views
0

可能重複:
How do I get the nth element from a Dictionary?如何從字典中獲得第n個元素鍵名稱?

我必須從字典中獲得關鍵的名稱。 How do I get the nth element from a Dictionary?補救不是。

Dictionary<string, string> ListDegree= new Dictionary<string,int>(); 
ListDegree.Add('ali', 49); 
ListDegree.Add('veli', 50); 

我想要索引「阿里」。以下代碼獲得值「324」。我該怎麼辦?

int i=-1; 
foreach (var item in ListDegree) 
{ 
    i++; 
} 
if (i == -1) 
    mf.txtLog.AppendText("Error: \"Code = 1\""); 
else 
    mf.txtLog.AppendText("Error: \""+ListDegree[ListDegree.Keys.ToList() 
     [i]].ToString()+"\""); 
+14

字典是沒有順序的,所以得到一個'nth'元素沒有意義。您可以改爲使用['OrderedDictionary'](http://msdn.microsoft.com/zh-cn/library/system.collections.specialized.ordereddictionary.aspx)。 – Oded

+2

@JonSkeet:'ListDegree'是他在第一個代碼片段中定義的字典。 –

+0

@Jon Skeet對不起。 listdegree是一個字典對象。我編輯了這個問題。 – RockOnGom

回答

1
public TKey GetNthKeyOf<TKey,TValue>(Dictionary<TKey,TValue> dic, n) 
{ 
    int i = 0; 
    foreach(KeyValuePair kv in dic) 
    { 
     if (i==n) return kv.Key; 
     i++; 
    } 
    throw new IndexOutOfRangeException(); 
} 

* 編輯 *

public static class DicExt 
{ 
    public static TKey GetNthKeyOf<TKey,TValue>(this Dictionary<TKey,TValue> dic, n) 
    { 
     int i = 0; 
     foreach(KeyValuePair kv in dic) 
     { 
      if (i==n) return kv.Key; 
      i++; 
     } 
     throw new IndexOutOfRangeException(); 
    } 
} 

* EDIT 2 * 作爲@tomfanning說,字典不提供排序保證,所以我的解決辦法是一個假的解決方案,並沒有道理。

+0

你可以使它成爲一種擴展方法! –

+1

需要增加我的for循環。謝謝。 – RockOnGom

+0

已經增加了! –

1

正如Oded指出的那樣,你爲什麼不使用OrderedDictionary? 下面是一個示例:

using System; 
using System.Collections.Specialized; 

namespace ConsoleApplication1 
{ 
    class ListDegree:OrderedDictionary 
    { 
    } 

    class Program 
    { 
     public static void Main() 
     { 
      var _listDegree = new ListDegree(); 
      _listDegree.Add("ali", 324); 
      _listDegree.Add("veli", 553); 

      int i = -1; 
      foreach (var item in _listDegree) 
      { 
       i++; 
      } 
      if (i == -1) 
       Console.WriteLine("Error: \"Code = 1\""); 
      else 
       Console.WriteLine("Error: \"" + _listDegree[i] + "\""); 
     } 
    } 
} 
0
mf.txtLog.AppendText("Hata: \"" + anchorPatternClass.GetNthKeyOf(i).ToString() + "\""); 
...... 
    public TKey GetNthKeyOf<TKey,TValue>(Dictionary<TKey,TValue> dic, n) 
    { 
     int i = 0; 
     foreach(KeyValuePair kv in dic) 
     { 
      if (i==n) return kv.Key; 
      i++; 
     } 
     throw new IndexOutOfRangeException(); 
    } 
+3

你爲什麼複製了某人給你的答案並自己發佈了答案? – Rawling

+0

因爲我不能編輯@MSS的帖子,所以我發佈了它。 – RockOnGom

+0

我的答案有一個小小的錯誤,我沒有增加I. –

0

雖然accesing由第N個元素的字典似乎不可思議,這裏是如何它可能是

int N=..... 
var val = ListDegree.SkipWhile((kv, inx) => inx != N) 
        .Select(kv => kv.Value) 
        .First(); 
相關問題