我在Jon Skeet的深度第二版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;
}
}
Run Code Online (Sandbox Code Playgroud)
具体如何将"单词"键添加到字典中?在我看来,创建了一个名为frequency的新词典,它是空的.然后有一种方法使用Regex.Split将名为text的字符串拆分为字符串数组.到目前为止一切都很好 接下来有一个循环遍历数组的foreach循环,但下一部分将我绊倒,它检查频率是否包含特定单词,如果确实如此,则将其值增加1或者如果它还没有将值设置为1.但是如何首先使用"word"键填充字典以允许对其进行检查?
它似乎发生在这一行
frequencies[word] = 1;
Run Code Online (Sandbox Code Playgroud)
但我无法在任何地方找到一个引用,指的是指定字典对象后跟方括号,并且对值的赋值也会填充键.我认为你需要使用字典实例的add方法,或者在初始化字典时这样做.
如果我是对的,这个动作的名称是什么?
frequencies[word] = 1;
Run Code Online (Sandbox Code Playgroud)
和打电话一样
frequencies.Add(word, 1);
Run Code Online (Sandbox Code Playgroud)
如果关键字尚不存在.否则,您将覆盖该值.
当你拨打[something]字典时,你会按键获得一个值something.设置也是如此.设置值时,您可以调用dictionary[key] = value.
使用的函数是[]运算符(括号运算符).
我进入对象浏览器,发现了有关[]通用字典的运算符:
public TValue this[TKey key] { get; set; }成员System.Collections.Generic.Dictionary<TKey, TValue>摘要:获取或设置与指定键关联的值.
参数:key:要获取或设置的值的键.
返回值:与指定键关联的值.如果未找到指定的键,则 get操作将抛出System.Collections.Generic.KeyNotFoundException,并且set操作将使用指定的键创建新元素.
异常:System.ArgumentNullException:key为null.System.Collections.Generic.KeyNotFoundException:检索该属性,并且该集合中不存在密钥.