如何在Dictionary <string,list <string [] =“”>&gt;()对象中检查字符串值?

时间:2015-04-24 20:31:46

标签: c# dictionary

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

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 
        }
    }

2 个答案:

答案 0 :(得分:4)

John Odom是对的,你需要一个List。

我建议您在内部使用$(function () { if (window.location.pathname.indexOf('/u') == 0) { var imgdefondo = $('#field_id2 dd.ajax-profil_parent div.field_uneditable').text(); //*****imagen de fondo*****// $("td.row1 div#profile-advanced-details.genmed").css("background", "url('imgdefondo') no-repeat center"); } }); 作为HashSet<string>的值。例如。 Diictionary

然后在查询时你可以这样做:

Dictionary<string, HashSet<string>>

查看.NET Nested Loops vs Hash Lookups进行效果比较

答案 1 :(得分:0)

如果您只想知道字典是否包含汽车麸(例如&#34; honda&#34;),您可以使用此查询:

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,则该值在字典中。

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

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