搜索字典的值并返回符合条件的键的列表

8

我遇到了一个查找这种样式的字典的问题。

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


双星号(**)代表什么? - Caspar Kleijne
1
@CasparKleijne 非应用 粗体 格式化。 - Uwe Keim
1
我想要突出显示那个索引,但在代码格式中无法实现。 我会将其删除。 - McNade
1
虽然你现在已经有了采纳的答案,但将来请始终添加你使用的代码。展示你当前的方法,解释你不喜欢它的地方,然后提出你的问题。如果没有别的,展示目前正在工作的代码也是一种文档形式,确保人们准确理解解决方案需要做什么。 - Chris
1
你可能想要考虑使用Dictionary<string, Tuple<string, int>>而不是Dictionary<string, string[]>。 - Taemyr
2个回答

15

没有任何错误处理:

var list = dic.Where(x => int.Parse(x.Value[1]) > 1)
              .Select(x => x.Key)
              .ToList();
使用Where语句过滤Value[1]大于1的条目,并使用Select语句选择这些条目的键。最后,使用ToList方法将集合转换为列表。

有关详细信息,请参阅C#中的101个LINQ示例

谢谢,它完美地工作了,那些示例也很棒。 - McNade

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接