如何在C#深度第二版中以这种方式使用C#Dictionary?

时间:2013-09-19 11:02:54

标签: c# dictionary

我在Jon Skeet的深度第2版C#中遇到了以下代码,我不明白它是如何工作的。

Dictionary<string,int> frequencies;
frequencies = new Dictionary<string,int>();
string[] words = Regex.Split(text, @"\W+");
foreach (string word in words)
{
    if (frequencies.ContainsKey(word))
    {
        frequencies[word]++;
    }
    else
    {
        frequencies[word] = 1;
    }
}

具体如何将“word”键添加到词典中?在我看来,创建了一个名为frequency的新词典,它是空的。然后有一种方法使用Regex.Split将名为text的字符串拆分为字符串数组。到目前为止一切都很好接下来有一个循环遍历数组的foreach循环,但下一部分将我绊倒,它检查频率是否包含特定单词,如果确实如此,则将其值增加1或者如果它还没有将值设置为1.但是如何首先使用“word”键填充字典以允许检查它?

它似乎发生在这一行

frequencies[word] = 1;

但是我无法在任何地方找到一个引用,指的是指定字典对象后跟方括号,并且对值的赋值也会填充键。我认为你需要使用字典实例的add方法,或者在初始化字典时这样做。

如果我说得对,这个动作的名称是什么?

1 个答案:

答案 0 :(得分:8)

frequencies[word] = 1;

与调用

相同
frequencies.Add(word, 1);

如果关键字尚不存在。否则,您将覆盖该值。

当您在字典上拨打[something]时,您会按键something获得一个值。设置也是如此。设置值时,您可以调用dictionary[key] = value

使用的函数是[] operator (brackets operator)

我潜入对象浏览器,发现这是关于通用字典的[]运算符:

  

public TValue this[TKey key] { get; set; }       System.Collections.Generic.Dictionary<TKey, TValue>

的成员      

摘要:获取或设置与指定键关联的值。

     

参数:key:要获取或设置的值的键。

     

返回值:与指定键关联的值。 如果   找不到指定的键,一个get操作抛出一个   System.Collections.Generic.KeyNotFoundException,和设置操作   使用指定的键创建一个新元素。

     

异常:System.ArgumentNullException:key为null。   System.Collections.Generic.KeyNotFoundException:属性是   检索并且密钥在集合中不存在。