我在搜索字典时遇到问题。
Dictionary<string, string[]> dic = new Dictionary<string, string[]>(){
{"a", new string[](){"a_val","2"}},
{"b", new string[](){"b_val","1"}},
{"b", new string[](){"b_val","0"}}
};
我需要返回一个键列表,其中stingArray [1]元素的值大于“1”,如:
List<string> list = new List<string>{
"a"
};
因为我并不擅长使用LINQ,所以我目前的解决方案是迭代字典并将密钥添加到新列表中。但是这种方法看起来很丑陋,我正试图找到问题的另一种解决方案。
答案 0 :(得分:11)
没有任何错误处理:
var list = dic.Where(x => int.Parse(x.Value[1]) > 1)
.Select(x => x.Key)
.ToList();
使用Where
语句将过滤Value[1]
大于1的条目,并使用Select
语句选择此条目中的密钥。至少该集合将使用List
方法转换为ToList
。
有关详细信息,请查看101 LINQ Samples in C#
答案 1 :(得分:3)
试试这个(你的字典定义有一些编译错误,我做了一些猜测):
static void Main(string[] args)
{
var dic = new Dictionary<string, string[]>(){
{"a", new string[]{"a_val","2"}},
{"b", new string[]{ "b_val","1"}},
{"c", new string[]{ "b_val","0"}}};
string[] expected = dic
.Where(kv => Convert.ToInt32(kv.Value[1]) > 1)
.Select(kv => kv.Key).ToArray();
}