c# - 将多个字典的值合并到一个列表中

标签 c# linq dictionary

我想将多个字典(确切地说是 3 个)的值合并到一个列表中。我当前的解决方案使用 linq 首先组合字典,然后将值转换为列表。

private List<Part> AllParts()
{
    return walls.Concat(floors)
                .Concat(columns)
                .ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
                .Values
                .ToList();
}

首先合并列表似乎是多余的。我该如何改进?

最佳答案

您可以通过连接字典并选择值而不转换为字典来简化此代码:

return walls.Concat(floors)
            .Concat(columns)
            .Select(kvp => kvp.Value)
            .ToList();

它看起来是最短且最易读的解决方案。您可以通过仅取值来避免连接您的集合:

return walls.Values
            .Concat(floors.Values)
            .Concat(columns.Values)
            .ToList();

但是,我在这里没有看到任何可读性、可维护性或性能改进。

附言我假设您的词典中没有重复项。此代码将包含重复的值,而 ToDictionary 方法将在键重复时抛出异常。

关于c# - 将多个字典的值合并到一个列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39200900/

相关文章:

c# - Linq lambda 表达式中的 bool 短路评估

python - 如何在python中为dict使用点符号?

c++ - 使用以一对 int、int 和 int 为模板的映射实现内存表

c# - Entity Framework 中多个相似实体类型的常见查询

c# - 从列表<Control>获取字典<string,string>

c# - 我在 Chrome 中不断收到错误 : HTTP Error 403. 14 - 禁止使用 Web 应用程序 Visual Studio 2012

c# - 如何防止命名空间污染?

c# - GZipStream 正在切断 XML 的最后一部分

c# - 以编程方式将控件添加到 TabPage

c# - LINQ 设计好奇心 : Skip/Take vs. SkipWhile/TakeWhile