浏览字典<string,int =“”> c#</string,>

时间:2012-05-08 12:52:28

标签: c# c#-4.0

浏览字典的更好方法是什么?当我有IDictionary时,我以前使用下面的代码:

假设我有名为freq

的IDictionary
IEnumerator enums = freq.GetEnumerator();
while (enums.MoveNext())
{
    string word = (string)enums.Key;
    int val = (int)enums.Value;
    .......... and so on

}

但现在,我想用字典

做同样的事情

3 个答案:

答案 0 :(得分:15)

foreach的默认枚举器为您提供KeyValuePair<TKey, TValue>

foreach (var item in dictionary)
// foreach (KeyValuePair<string, int> item in dictionary)
{
    var key = item.Key;
    var value = item.Value;
}

这只是编译成直接与枚举器一起使用的代码,如旧代码中那样。

或者您可以直接枚举.Keys.Values(但在这种情况下您只能得到一个键或值):

foreach (var key in dictionary.Keys)

foreach (var val in dictionary.Values)

或者当然linq对抗词典:

C# linq in Dictionary<>

答案 1 :(得分:8)

可以Dictionary做同样的事情,但在两个案例中使用foreach会更清晰:

foreach (var entry in dictionary)
{
    string key = entry.Key;
    int value = entry.Value;
    // Use them...
}

这相当于:

using (var iterator = dictionary.GetEnumerator())
{
    while (iterator.MoveNext())
    {
        var entry = iterator.Current;
        string key = entry.Key;
        int value = entry.Value;
        // Use them...
    }
}

非常很少显式调用GetEnumerator并自己迭代。这在少数情况下是合适的,例如当您想要以不同方式处理第一个值时,但如果您要以相同的方式处理所有条目,请使用foreach

(注意,它实际上相当于在这里使用var,但等同于声明IEnumerator<KeyValuePair<string, int>> - 它实际上将使用嵌套的Dictionary.Enumerator结构这是你通常不需要担心的细节。)

答案 2 :(得分:4)

foreach语句通过枚举器自动迭代。

foreach (KeyValuePair<string,int> entry in freq) {
    string word = entry.Key;
    int val = entry.Value;
    .......... and so on

}