【问题标题】:How to find the keys in dictionary object which matches partially?如何在字典对象中找到部分匹配的键?
【发布时间】:2011-10-13 22:47:15
【问题描述】:

我正在尝试根据部分或完全匹配的给定字符串抓取字典中的所有项目。

我尝试了以下代码,但似乎不起作用

a.Where(d => d.Value.Contains(text)).ToDictionary(d => d.Key, d => d.Value);

你能告诉我如何做到这一点吗?

【问题讨论】:

  • 您能否定义“但似乎不起作用”?发生什么了?它会在火花中爆炸吗?它会给出空的结果吗?请假设我们需要知道您正在经历什么,以及这与您的预期有何不同(所以也请告诉我们您的预期)。
  • 您的问题不清楚。在标题中它说找到 keys,但您的代码正在检查 values。也许你的意思是d => d.Key.Contains(text)??
  • 我希望这会有点慢;它可能必须遍历每个键条目,在这个用例中否定 Dictionary 的值。希望您不必经常这样做,否则您可能需要不同的数据结构(如果您有很多条目)。

标签: c# .net linq generics dictionary


【解决方案1】:

假设您真的想找到 value 部分匹配的 entries,那么您提供的代码应该可以正常工作。如果你看到别的东西,我怀疑你的诊断有缺陷。如果你想找到 key 部分匹配的条目,你只想交换

a.Where(d => d.Value.Contains(text))

a.Where(d => d.Key.Contains(text))

简短但完整的程序演示了您提供的代码:

using System;
using System.Collections.Generic;
using System.Linq;

class Test
{
    static void Main()
    {
        var original = new Dictionary<string, string> {
            { "a", "foo" },
            { "b", "bar" },
            { "c", "good" },
            { "d", "bad" },
        };

        string needle = "oo";

        var filtered = original.Where(d => d.Value.Contains(needle))
                               .ToDictionary(d => d.Key, d => d.Value);

        foreach (var pair in filtered)
        {
            Console.WriteLine("{0} => {1}", pair.Key, pair.Value);
        }
    }
}

输出:

a => foo
c => good

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多