List (список) — один із чотирьох видів колекцій, які пропонує Dart. Список, як і масив, утворюється з впорядкованого набору елементів, де індекс починається з 0.
Оглянемо декілька методів списку, які хоч і не дуже популярні, проте можуть бути надзвичайно корисні для особливих завдань. Для закріплення матеріалу наведемо приклади.
sublist()
Метод повертає новий список з елементів між індексами start
(включно) та end
(виключно).
var myList = [1,2,3,4,5];
print(myList.sublist(1,3)); // [2,3]
Якщо параметр end
не задано, то буде повернено всі елементи, починаючи з індексу start
— до кінця списку.
print(myList.sublist(1)); // [2,3,4,5]
shuffle()
Метод переставляє елементи у випадковому порядку.
myList.shuffle();
print('$myList'); // [5,4,3,1,2]
reversed
reversed
— це гетер, який повертає елементи списку у зворотному порядку.
var descList = [6,5,4,3,2,1];
print(descList.reversed.toList()); // [1,2,3,4,5,6]
var ascList = [1,2,3,4,5,6];
print(ascList.reversed.toList()); // [6,5,4,3,2,1]
asMap()
Метод повертає об'єкт Map
на основі списку. Ключами будуть індекси списку, а значеннями — відповідні елементи.
List<String> sports = ['cricket', 'football', 'tennis', 'baseball'];
Map<int, String> map = sports.asMap();
print(map); // {0: cricket, 1: football, 2: tennis, 3: baseball}
whereType()
Метод повертає ітерований об'єкт, елементи якого мають певний тип даних.
Припустимо, у нас є список з елементів різних типів (скажімо, String
та int
), а нам потрібно отримати лише дані типу int
. Тут на допомогу приходить метод whereType
:
var mixList = [1, "a", 2, "b", 3, "c", 4, "d"];
var num = mixList.whereType<int>();
print(num); // (1, 2, 3, 4)
Так само ми можемо отримати дані лише типу String
, визначивши:
mixList.whereType<String>()
getRange()
Метод повертає елементи з визначеного проміжку в тому ж порядку, як і у списку. Зверніть увагу, що елемент з індексом start
буде в списку, а з індексом end
— ні.
replaceRange()
Метод допомагає оновити чи замінити деякі елементи списку на нові. Потрібно лише передати проміжок між індексами start
і end
та вказати нові значення.
var rList= [0,1,2,3,4,5,6];
rList.replaceRange(2,3, [10]);
print('$rList'); // [0, 1, 10, 3, 4, 5, 6]
firstWhere()
Метод повертає перший елемент списку, який відповідає умові.
var firstList = [1,2,3,4,5,6];
print(firstList.firstWhere((i) => i < 4)); // 1
var sList = ['one', 'two', 'three', 'four'];
print(sList.firstWhere((i) => i.length > 3)); // three
Аналогічно lastWhere()
повертає останній елемент списку, який задовольняє задану умову. where()
повертає новий список, що відповідає умові.
singleWhere()
Метод повертає перший елемент, який точно задовольняє умову.
var mList = [1, 2, 3, 4];
print(mList.singleWhere((i) => i == 3)); // 3
Якщо список містить дублікати, метод singleWhere
викликає виключення. В такому випадку ми можемо використати firstWhere()
, який поверне перший елемент, що задовольняє умову, попри дублікати у списку.
var sList = [1, 2, 3, 3, 4];
print(sList.singleWhere((i) => i == 3));
// Bad state: Too many elements
print(sList.firstWhere((i) => i == 3)); // 3
fold()
Метод повертає єдине значення, отримане внаслідок ітерації елементами списку та виконанням над ними та заданим початковим елементом певних дій. Тобто якщо вам треба сума чи добуток всіх елементів масиву, вам допоможе fold()
:
var lst = [1,2,3,4,5];
var res = lst.fold(5, (i, j) => i + j);
print('res is ${res}'); // результат 20
У прикладі вище початковим значенням є 5. Метод fold()
починає ітерацію з елемента за індексом 0 та додає до нього початкове значення, тобто 5: (5 + 1)
. Такі дії повторюються для кожного елемента списку: результат попередньої ітерації додається до наступного елемента (6+2, 8+3, 11+4, 15+5)
. Наприкінці ми отримуємо одне значення, суму всіх елементів та початкового значення, тобто 20.
reduce()
Метод дуже подібний до fold()
, тому що повертає єдине значення після ітерації всіма елементами заданого списку. Єдина відмінність: цей метод не приймає початкового значення, а список не може бути порожнім.
var lst = [1,2,3,4,5];
var res = lst.reduce((i, j) => i + j);
print('res is ${res}'); // результат 15
followedBy()
Метод приєднує ітеровані об'єкти до заданого списку.
var sportsList = ['cricket', 'tennis', 'football'];
print(sportsList.followedBy(['golf', 'chess']).toList());
// [cricket, tennis, football, golf, chess]
any()
Метод повертає булеве значення: true
, якщо хоча б один елемент задовольняє умову, в іншому випадку метод повертає false
.
print(sportsList.any((e) => e.contains('cricket'))); // true
every()
Метод повертає булеве значення: true
, якщо всі елементи відповідають вказаній умові.
take()
Метод повертає задану кількість елементів списку, починаючи з індексу 0:
print(sportsList.take(2)); // (cricket, tennis)
skip()
Метод ігнорує задану кількість елементів списку, починаючи з індексу 0, та повертає елементи, які залишились.
print(sportsList.skip(2)); // (football)
Наведемо ще декілька корисних методів та властивостей списку в Dart:
-
add
: додає новий елемент до списку; -
length
: повертає кількість елементів списку; -
isEmpty
: повертаєtrue
, якщо в списку немає елементів; -
isNotEmpty
: повертаєtrue
, якщо в списку є елементи; -
first
: повертає перший елемент списку; -
last
: повертає останній елемент списку; -
clear
: метод очищає список.
Ще немає коментарів