【问题标题】:Search dictionary values and return List of keys meeting conditions搜索字典值并返回满足条件的键列表
【发布时间】:2017-12-08 19:27:18
【问题描述】:

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

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

【问题讨论】:

  • 双星号(**)代表什么?
  • @CasparKleijne 未应用 bold 格式 ????.
  • 我想突出显示该索引,但这在代码格式中不起作用。我会删除它。
  • 虽然您现在已经接受了将来的答案,但请始终添加您正在使用的代码。向我们展示您当前的方法,解释您不喜欢的地方,然后提出您的问题。如果没有其他任何东西向我们展示您当前工作的代码,那是一种文档形式,可确保人们准确了解解决方案需要做什么。
  • 您可能需要考虑使用 Dictionary> 而不是 Dictionary

标签: c# arrays list linq dictionary


【解决方案1】:

没有任何错误处理:

var list = dic.Where(x => int.Parse(x.Value[1]) > 1)
              .Select(x => x.Key)
              .ToList();

使用Where 语句,将过滤Value[1] 大于1 的条目,使用Select 语句,将选择来自该条目的键。至少该集合将使用ToList 方法转换为List

更多信息请查看101 LINQ Samples in C#

【讨论】:

  • 谢谢你,它工作得很好,这些样本很棒。
【解决方案2】:

试试这个(你的字典定义有一些编译错误,我做了一些猜测):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2021-01-22
    • 1970-01-01
    • 2018-10-23
    相关资源
    最近更新 更多