在颤振飞镖中合并2个对象列表的最简单方法是啥?

Posted

技术标签:

【中文标题】在颤振飞镖中合并2个对象列表的最简单方法是啥?【英文标题】: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
]

【问题讨论】:

【参考方案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 映射中“名称”的值。

以上是关于在颤振飞镖中合并2个对象列表的最简单方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

颤振/飞镖中的元组列表

在 Vim 中,将文件中的所有行合并为一行的最简单方法是啥?

如何在颤振飞镖中使用相同的元素初始化列表?

从JSON格式的字符串创建python列表的最简单方法是啥[重复]

如何在颤振/飞镖中缓存列表视图构建器?

在 Android 中保存 ArrayList 的最简单方法是啥?