【问题标题】:Searching dictionary for matching key from a textbox C#从文本框 C# 中搜索匹配键的字典
【发布时间】:2020-12-11 18:49:39
【问题描述】:

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

'''

    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 是否包含文本中的任何缩写并将其更改为完整版本。因此,如果文本框包含以下内容。单击按钮后“将要AFK”,它将更改为“将要离开键盘”。

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

由于我不确定如何使用来自文本框的输入来执行此操作,任何人都可以向我展示解决此问题的最佳方法吗?

谢谢

【问题讨论】:

  • 您为什么不使用正确的 Dictionary 类?在字典中检索键/值非常简单
  • 我对 WPF 还很陌生,所以我不确定如何将 .CSV 直接读入字典,而是选择转换两个列表。

标签: c# wpf dictionary wpf-controls


【解决方案1】:

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

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

【讨论】:

  • 啊,谢谢,这是一个更好的方法,我会尽快纠正这个问题。
【解决方案2】:

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

if(dict.ContainsKey(myKey))
{
}

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多