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

Posted

技术标签:

【中文标题】搜索字典值并返回满足条件的键列表【英文标题】: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 【参考方案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();
    

【讨论】:

以上是关于搜索字典值并返回满足条件的键列表的主要内容,如果未能解决你的问题,请参考以下文章

如果在 R 中满足条件,则从前一行获取值并连接

SQL 查询:如果满足搜索条件,则应返回单条记录,否则返回多条记录

如何返回满足特定条件的行列表以及它之前的行?

如何遍历 2 个文件中的行,比较值并在满足条件时更新文件中的值?

选择完全满足给定先决条件列表的课程

映射列满足特定条件的字典中的值