[英]How to write a Table-driven lexer by C#? (Based on Engineering a Compiler 2nd Edition book)
[英]How is the C# Dictionary used this way in C# in depth 2nd Edition?
我在 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;
}
}
具體如何將“word”鍵添加到字典中? 在我看來,創建了一個名為頻率的新字典,它是空的。 然后有一種方法可以使用 Regex.Split 將名為 text 的字符串拆分為字符串數組。 到目前為止一切都很好。 接下來是一個循環遍歷數組的 foreach 循環,但下一部分讓我感到困惑,它正在檢查頻率是否包含特定單詞,如果包含則將它的值增加 1 或者它是否還沒有value 將其設置為 1。但是如何首先用“word”鍵填充字典以允許對其進行檢查?
它看起來發生在這一行
frequencies[word] = 1;
但是我在任何地方都找不到一個引用,它說指定一個字典對象后跟方括號,並且對一個值的賦值也會填充鍵。 我認為您需要使用字典實例的 add 方法或在初始化字典時這樣做。
如果我是對的,這個動作的名稱是什么?
frequencies[word] = 1;
與調用相同
frequencies.Add(word, 1);
如果關鍵字不存在。 否則,您將覆蓋該值。
當你在字典上調用[something]
,你會通過鍵得到一個值something
。 設置也是如此。 設置值時,您可以調用dictionary[key] = value
。
使用的函數是[]
運算符(括號運算符) 。
我潛入對象瀏覽器並發現有關通用字典的[]
運算符的內容:
public TValue this[TKey key] { get; set; }
public TValue this[TKey key] { get; set; }
的成員System.Collections.Generic.Dictionary<TKey, TValue>
摘要:獲取或設置與指定鍵關聯的值。
參數: key:要獲取或設置的值的鍵。
返回值:與指定鍵關聯的值。 如果未找到指定的鍵,則獲取操作會引發 System.Collections.Generic.KeyNotFoundException,並且設置操作會使用指定的鍵創建一個新元素。
異常: System.ArgumentNullException:鍵為空。 System.Collections.Generic.KeyNotFoundException:檢索到該屬性並且集合中不存在鍵。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.