c# - 通过键从字典中获取项目

标签 c# dictionary multi-level

我有这样的结构:

static Dictionary<int, Dictionary<int, string>> tasks = 
    new Dictionary<int, Dictionary<int, string>>();

好像是这样

[1]([8] => "str1")
[3]([8] => "str2")
[2]([6] => "str3")
[5]([6] => "str4")

我想从此列表中获取所有 [8] 字符串,即 str1 + str2
该方法应如下所示:

static List<string> getTasksByNum(int num){

}

我如何访问它?

最佳答案

使用 LINQ,您可以执行如下操作:

return tasks.Values
            .Where(dict => dict.ContainsKey(8))
            .Select(dict => dict[8])
            .ToList();      

虽然这很优雅,但 TryGetValue 模式通常比它使用的两个查找操作更可取(首先尝试 ContainsKey,然后使用索引器获取值)。

如果这对你来说是个问题,你可以做类似的事情(使用合适的辅助方法):

return tasks.Values
            .Select(dict => dict.TryGetValueToTuple(8))
            .Where(tuple => tuple.Item1)
            .Select(tuple => tuple.Item2)
            .ToList();  

关于c# - 通过键从字典中获取项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7486488/

相关文章:

c# - 关闭表单后进程没有关闭

c# - 使用 .NET 创建 100,000 个 tcp 连接

c++ - std::unordered_map - Inserting elements is “attempting to reference a deleted function”

r - clmm后如何使用dotplot

php - 多级用户组 PHP Mysql 无限循环

list - latex 错误: Counter too large: Latex multilevel list

c# - 对 Func、委托(delegate)和匿名类型感到困惑

c# - DataGridViewTextBoxColumn 在数字单元格中添加逗号

python - 嵌套Python字典

dictionary - 用于创建 map 的 Clojure 宏