包含基于字典值的字符串字典的List索引

时间:2014-12-05 14:00:33

标签: c# linq list dictionary

我有一个List<Dictionary<string,string>>,我想获得包含特定值的字典索引。我知道这可以通过LINQ实现,但我完全迷失了如何获得它......

非常感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

int index = listOfDictionaries.FindIndex(dict => dict.ContainsValue("some value"));

如果该值未包含在任何词典中,则返回-1。

答案 1 :(得分:2)

如果您确定该元素已包含,那么您可以使用:

int idx = list.IndexOf(list.Single(x => x.ContainsValue("value")));

如果您不确定,则必须测试它是否包含在内:

var match = list.SingleOrDefault(x => x.ContainsValue("value"));
int idx = match != null ? list.IndexOf(match) : -1;

您使用ContainsKeyContainsValue,取决于您搜索的值是键还是值。

答案 2 :(得分:1)

假设List<Dictionary<string,string>>dictionaries

var matches = dictionaries
    .Select((d, ix) => new { Dictionary = d, Index = ix })
    .Where(x => x.Dictionary.Values.Contains("specificValue")); // or ContainsValue as the Eric has shown

foreach(var match in matches)
{
    Console.WriteLine("Index: " + match.Index);
}

如果您只是想要第一场比赛,请使用matches.First().Index。这种方法的好处是您还拥有Dictionary,并且如果需要,您可以获得所有匹配。