【问题标题】:what is the easiest way to merge 2 list of object in flutter dart?在颤振飞镖中合并2个对象列表的最简单方法是什么?
【发布时间】:2020-05-25 23:53:58
【问题描述】:

在flutter dart中合并2个对象列表并获得结果的最简单方法是什么?

列表 1

[
  {name: eat, frequency: Daily}, 
  {name: read, frequency: Daily}, 
  {name: walk, frequency: Daily,}
]

清单 2

[
  {name: eat, count: 2}, 
  {name: read, count: 2}, 
  {name: walk, count: 2,}
]

结果

[
  {name: eat, count: 2, frequency: Daily}, 
  {name: read, count: 2, frequency: Daily}, 
  {name: walk, count: 2, frequency: Daily}
]

【问题讨论】:

    标签: list flutter arraylist dart


    【解决方案1】:

    有几种简单的方法可以组合这些列表,但它们会遇到几个问题。例如,您能否保证列表的长度相同并且列表的顺序相同(就嵌套映射中的“名称”字段而言)?

    如果您不能保证相同的长度和匹配的顺序,那么您需要采用一种稍微复杂一点的方法,该方法与这些问题中的任何一个无关。

    void main() {
     final list1 = [
        {'name': 'eat', 'frequency': 'Daily'},
        {'name': 'read', 'frequency': 'Weekly'},
        {'name': 'walk', 'frequency': 'Monthly'},
      ];
    
      final list2 = [
        {'name': 'walk', 'count': 4},
        {'name': 'eat', 'count': 2},
        {'name': 'read', 'count': 3},
      ];
    
      // Convert the second list into a lookup table
      final lookup = Map.fromIterable(list2, key: (m) => m['name'], value: (m) => m);
    
      // Generate the combined list, using the first list as a base
      final combined = list1.map((m) => { ...m, ...lookup[m['name']] }).toList();
    
      print(combined);
    
      // Prints (formatted) 
      // [
      //   {name: eat, count: 2, frequency: Daily}, 
      //   {name: read, count: 3, frequency: Weekly}
      //   {name: walk, count: 4, frequency: Monthly}, 
      // ]
    }
    
    

    【讨论】:

      【解决方案2】:

      假设列表具有相同的长度并包含地图:

      void main() {
        var l1 = [
          {'name': 'eat', 'frequency': 'Daily'},
          {'name': 'read', 'frequency': 'Daily'},
          {'name': 'walk', 'frequency': 'Daily'}
        ];
        var l2 = [
          {'name': 'eat', 'count': 2},
          {'name': 'read', 'count': 2},
          {'name': 'walk', 'count': 2}
        ];
        var l3 = [
          for (var i = 0; i < l1.length; i++) {...l1[i], ...l2[i]},
        ];
        print(l3);
        // [{name: eat, frequency: Daily, count: 2}, {name: read, frequency: Daily, count: 2}, {name: walk, frequency: Daily, count: 2}]
      }
      

      【讨论】:

      • 这也是假设相应地图中的“名称”字段具有相同的值,即列表按匹配顺序排列。否则,l2 映射中的“名称”将覆盖 l1 映射中“名称”的值。
      猜你喜欢
      • 2021-09-27
      • 2020-08-12
      • 2021-01-24
      • 2019-02-05
      • 2020-02-11
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2020-11-29
      相关资源
      最近更新 更多