【问题标题】:How can I check for string values in a Dictionary<string, List<string[]>>() object?如何检查 Dictionary<string, List<string[]>>() 对象中的字符串值?
【发布时间】:2015-04-25 08:06:03
【问题描述】:

为了简单起见,我有以下字典,我为每个字符串键填充了未知数量的字符串。我还有以下字符串列表。

var dict = new Dictionary<string, List<string[]>>();
IList<string> headerList = new List<string>();

如何检查列表中的字符串是否是字典中的值? 我的数据看起来像这样:

 Key           Value
 -----         ------------------
 Car           honda, volks, benz
 Truck         chevy, ford

例如,我需要检查“honda”是否是包含在字典值中的值。我想我需要执行以下操作来查看这些值是否包含一个列表,其中包含有问题的字符串。请记住,我对 C# 还很陌生。

    foreach (string header in headerList)
    {
        // This is wrong, I don't know what to put in the if statement 
        if (dict.ContainsValue(r => r.Contains(header)))
        {
            // do stuff 
        }
    }

【问题讨论】:

  • 谷歌搜索如何使用ContainsKey方法
  • 我需要检查值,而不是键
  • 然后搜索ContainsValue
  • 这是一个相当复杂的结构。你的字典里的键是什么?这看起来有点像你在思考这个问题。此外,如果您使用列表,则可以使用 Contains dict[key].Contains(header)
  • Dictionary>() 不应该是 Dictionary>();反而?要声明字符串列表,只需声明 List()

标签: c# dictionary


【解决方案1】:

约翰·奥多姆是正确的,你需要一个列表。

我建议您在内部使用HashSet&lt;string&gt; 作为Diictionary 的值。例如。 Dictionary&lt;string, HashSet&lt;string&gt;&gt;

然后在查询它时,您可以执行以下操作:

 headerList.Where(x => dict.Values.Any(d => d.Contains(x))).ToList()

查看.NET Nested Loops vs Hash Lookups 进行性能比较

【讨论】:

  • 这个答案更受欢迎,因为使用了 HashSet 并且它的代码更少。
【解决方案2】:

如果您只想知道字典是否包含汽车麸皮(例如“honda”),您可以使用以下查询:

bool isInDict = dict.Values
                    .SelectMany(lst => lst)
                    .Any(car => car == "honda");

要返回存储值的键,您可以使用以下内容:

string containingKey = dict.Keys
                           .Where(key => dict[key].Contains("honda"))
                           .FirstOrDefault();

要获取值出现的整个列表,请运行以下命令:

List<string> containingList = dict.Values
                                  .Where(v => v.Contains("honda"))
                                  .FirstOrDefault();

在第一种情况下,您将所有列表展平并检查它们是否有任何值是搜索到的汽车名称。如果为 true,则该值在字典中。

第二个:拿到所有的钥匙。将每个键应用于字典以获取相应的列表并检查列表是否包含汽车名称。返回找到汽车名称的第一个键。

第三个 - 类似于第二个,但我们对值运行搜索。检查值(即列表)是否包含汽车名称。返回第一个包含该名称的集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 2019-01-29
    • 2013-05-15
    • 1970-01-01
    • 2012-10-20
    • 2015-12-13
    相关资源
    最近更新 更多