从文本框 C# 中搜索字典以匹配键

Searching dictionary for matching key from a textbox C#

我正在阅读一个包含缩写和完整版本的 csv 文件,例如 LOL,大笑。我创建了一个字典,其中缩写是键,完整版本是值。

'''

    private void btnFilter_Click(object sender, RoutedEventArgs e)
    {

        var keys = new List<string>();
        var values = new List<string>();
        using (var rd = new StreamReader("textwords.csv"))
        {
            while (!rd.EndOfStream)
            {
                var splits = rd.ReadLine().Split(',');
                keys.Add(splits[0]);
                values.Add(splits[1]);
            }
        }
        var dictionary = keys.Zip(values, (k, v) => new { Key = k, Value = v }).ToDictionary(x => x.Key, x => x.Value);


        foreach (var k in dictionary)
        {
            //
        }

        aMessage.MessageContent = txtContent.Text;
    }

'''

我正在使用一个按钮来检查文本框 txtContent 是否包含文本中的任何缩写并将其更改为完整版本。因此,如果文本框包含以下内容。单击按钮后“将要挂机”会将其更改为“将要离开键盘”。

我想编写一个 foreach 循环来检查任何缩写,延长它们,然后将其保存到字符串变量 MessageContent。

谁能告诉我解决这个问题的最佳方法,因为我不确定如何处理来自文本框的输入?

谢谢

如果缩写正确,即不需要模糊逻辑,则可以使用各种 .NET 对象并相当快速地搜索键。

if(dict.ContainsKey(myKey))
{
}

我是徒手画的,所以它可能是 dict.Keys.Contains() 或类似的。关键是你可以直接查字典而不是循环。

如果您需要进行更模糊的搜索,您可以利用 LINQ 编写查询以极快地(和几行)迭代对象集合。

至于你的,你会迭代 dictionary.Keys 来搜索键,但我仍然不明白你为什么需要额外的代码。

您可以只使用 LINQ 读取和创建字典对象:

 var dictionary = File.ReadAllLines(@"textwords.csv")
                  .Select(x => x.Split(",",StringSplitOptions.RemoveEmptyEntries))
                   .ToDictionary(key => key.FirstOrDefault().Trim(), 
                    value =>  value.Skip(1).FirstOrDefault().Trim());