我有一个List<Dictionary<string,string>>
,我想获得包含特定值的字典索引。我知道这可以通过LINQ实现,但我完全迷失了如何获得它......
非常感谢任何帮助!
答案 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;
您使用ContainsKey
或ContainsValue
,取决于您搜索的值是键还是值。
答案 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
,并且如果需要,您可以获得所有匹配。