Какой самый простой способ объединить 2 списка объектов в флаттер дротик? - PullRequest
1 голос
/ 10 февраля 2020

Какой самый простой способ объединить 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}
]

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Есть несколько простых способов объединить эти списки, но они сталкиваются с несколькими проблемами. Например, можете ли вы гарантировать, что списки будут иметь одинаковую длину и порядок списков будет одинаковым (что касается поля «имя» во вложенных картах)?

Если вы можете Если вы не гарантируете одинаковую длину и соответствующий порядок, то вам нужно прибегнуть к чуть более сложному подходу, который является c для решения любой из этих проблем.

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}, 
  // ]
}

0 голосов
/ 10 февраля 2020

Предполагая, что списки имеют одинаковую длину и содержат Карты:

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}]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...