搜索字典值并返回满足条件的键列表

时间:2017-07-05 08:33:51

标签: c# arrays list linq dictionary

我在搜索字典时遇到问题。

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,所以我目前的解决方案是迭代字典并将密钥添加到新列表中。但是这种方法看起来很丑陋,我正试图找到问题的另一种解决方案。

2 个答案:

答案 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();
    }