在颤振飞镖中合并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 中,将文件中的所有行合并为一行的最简单方法是啥?