我在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方法,或者在初始化字典时这样做。
如果我说得对,这个动作的名称是什么?
答案 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:属性是 检索并且密钥在集合中不存在。