【问题标题】:Combine/merge multiple maps into 1 map将多张地图合并/合并为一张地图
【发布时间】:2017-12-25 07:34:24
【问题描述】:

如何将 dart 中的 2 个或更多地图合并/合并为 1 个地图? 例如我有类似的东西:

 var firstMap = {"1":"2"};
 var secondMap = {"1":"2"};
 var thirdMap = {"1":"2"};

我想要:

 var finalMap = {"1":"2", "1":"2", "1":"2"};

【问题讨论】:

    标签: dart


    【解决方案1】:

    你可以使用Map对象的addAll方法

    var firstMap = {"1":"2"};
    var secondMap = {"2":"3"};
    
    var thirdMap = {};
    
    thirdMap.addAll(firstMap);
    thirdMap.addAll(secondMap);
    
    print(thirdMap);
    

    或者

    var thirdMap = {}..addAll(firstMap)..addAll(secondMap);
    

    更新

    自 dart sdk 2.3 起 您可以使用扩展运算符...

    final firstMap = {"1":"2"};
    final secondMap = {"2":"3"};
    
    final thirdMap = {
       ...firstMap,
       ...secondMap,
    };
    

    【讨论】:

    • 难道没有办法将它们全部合并到一行中吗?
    • var finalMap = {}..addAll(firstMap)..addAll(secondMap)..addAll(thirdMap);
    • @HarryTerkelsen,您的反馈非常有用
    • 这在将地图与内部地图结合时不起作用
    【解决方案2】:

    使用Map.addAllIterable.reducecascading operator 的替代语法,用于组合大量地图:

    var combinedMap = mapList.reduce( (map1, map2) => map1..addAll(map2) );
    

    live dartpad 示例 https://dartpad.dartlang.org/9cd116d07d2f45a9b890b4b1186dcc5e

    【讨论】:

    • 拥有 dartpad 非常棒,它非常清楚地展示了它的工作原理,我可以使用这些值。谢谢!
    【解决方案3】:

    另一个选项是使用来自package:collectionCombinedMapView

    new CombinedMapView([firstMap, secondMap])
    

    它不会创建一个合并的地图,而是创建一个Map,它是两者的视图

    【讨论】:

    • 链接失效了。
    【解决方案4】:

    我想出了一个用于地图迭代的“单行”解决方案:

    var finalMap = Map.fromEntries(mapList.expand((map) => map.entries));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      • 2013-07-18
      • 2023-03-06
      • 2021-08-18
      • 1970-01-01
      • 2016-02-25
      相关资源
      最近更新 更多