Як об’єднати два списки в Dart?


85

Мені було цікаво, чи є простий спосіб об'єднати два списки в дартс, щоб створити абсолютно новий об'єкт списку. Я не міг знайти нічого і щось подібне:

Мій список:

list1 = [1, 2, 3]
list2 = [4, 5, 6]

Я намагався:

var newList = list1 + list2;

Я хотів отримати комбінований результат:

[1, 2, 3, 4, 5, 6]

Відповіді:


212

Ви можете використовувати:

var newList = new List.from(list1)..addAll(list2);

Якщо у вас кілька списків, ви можете використовувати:

var newList = [list1, list2, list3].expand((x) => x).toList()

Станом на Dart 2 тепер ви можете використовувати +:

var newList = list1 + list2 + list3;

Станом на Dart 2.3 ви можете використовувати оператор поширення:

var newList = [...list1, ...list2, ...list3];

23
Альтернатива (що дозволяє легко об’єднати багато списків) [list1, list2, list3, ...].expand((x) => x).toList():;
Флоріан Лойтш,

2
Зверніть увагу, що + оператор не може бути використаний у списках різних типів. (у цьому випадку ви отримуєте помилку типу type 'List<Widget>' is not a subtype of type 'List<Image>'.). Однак оператор поширення чудово працює для цього випадку використання.
Себастьян

Чи можете ви, будь ласка, перевірити це питання і запропонувати мені щось? stackoverflow.com/questions/62228799 / ...
Rocx

17

можливо, більш послідовний ~

var list = []..addAll(list1)..addAll(list2);

2
Старий я знаю, але в ..addAll()чому причина, чому не просто одна крапка?
Аббас. М.

6
@ Abbas.M .. - це для ланцюжка, для того, щоб позбутися подвійної крапки, потрібно: list = []; list.addAll (list1); list.addAll (list2); На мою думку, це в основному означає виклик цієї функції, але ігнорування того, що вона повертає, і продовження роботи над об’єктом, над яким ми працювали.
csga5000

10

Відповідь Олександра є найкращою, але якщо ви хочете використовувати +, як у вашому прикладі, ви можете використовувати перевантаження оператора Дартс:

class MyList<T>{
  List<T> _internal = new List<T>();
  operator +(other) => new List<T>.from(_internal)..addAll(other);
  noSuchMethod(inv){
    //pass all calls to _internal
  }
}

Тоді:

var newMyList = myList1 + myList2;

Дійсний :)



6

Якщо ви хочете об'єднати два списки та видалити дублікати, це можна зробити:

var newList = [...list1, ...list2].toSet().toList(); 

найкраще рішення для запобігання дублікатам елементів. 👍
Fuad All

0

Ми можемо додати всі елементи іншого списку до існуючого списку за допомогою addAll()методу.

Використання addAll()методу для додавання всіх елементів іншого списку до існуючого списку. і додає всі об'єкти, що підлягають ітерації, до кінця цього списку.

Розширює довжину списку за кількістю об'єктів, що ітерабельні. КидаєUnsupportedError якщо цей список є фіксованою довжиною.

Створення списків

listone = [1,2,3]
listtwo = [4,5,6]

Об’єднання списків

 listone.addAll(listtwo);

Вихід:

[1,2,3,4,5,6]

0

На мою думку, не потрібно створювати третій список ...

Використовуй це:

list1 = [1, 2, 3];
list2 = [4, 5, 6];
list1.addAll(list2);

print(list1); 
// [1, 2, 3, 4, 5, 6] // is our final result!
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.