5

我在 Jon Skeet 的 Depth 2nd Edition 中遇到了以下 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;
    }
}

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

它看起来发生在这一行

frequencies[word] = 1;

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

如果我是正确的,这个动作的名称是什么?

4

1 回答 1

8
frequencies[word] = 1;

和调用一样

frequencies.Add(word, 1);

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

当您调用[something]字典时,您会通过 key 获得一个值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:键为空。System.Collections.Generic.KeyNotFoundException:已检索到属性,但集合中不存在键。

于 2013-09-19T11:03:55.867 回答