1/Путь к первому мобильному приложению. Часть 1.6 - Изучаем язык Dart: Коллекции

Коллекции в Dart это массивы различных типов:

  1. List - Список - [value]
  2. Set - Множество - {value}
  3. Map - Словарь - {key:value}

В каждой определённой ситуации может подойти тот или иной тип переменной. Тот же тип Set хранит в себе неупорядоченный список уникальных значений и это может быть полезным.

List - Список

// Список
var list = [1,2,3];
list.add ( 4 ); // добавить элемент
print ( '$list, всего элементов ${list.length}' ); // [1, 2, 3, 4], всего элементов 4
list.remove ( 2 ); // удаляет элемент со значением (не по ключу, а именно по значению)
print ( '$list, всего элементов ${list.length}' ); // [1, 3, 4], всего элементов 3
list.remove ( 3 );
print ( '$list, всего элементов ${list.length}' ); // [1, 4], всего элементов 2
 
// Неизменяемый список
var listConst = const [1,2,3];

// Фиксированный список
var listFixed = List(4);
listFixed[0] = 0;
listFixed[1] = 1;
listFixed[2] = 2;
//listFixed.add ( 5 ); // Так добавить не получится
print ( listFixed ); // [0, 1, 2, null]

// Нефиксированный список
var listNoFixed = [];
listNoFixed.add ( 2 ); // Можно добавить элемент
print ( listNoFixed ); // [2]
  
// spread operator
var listSpread = [0,...listConst];
print ( listSpread ); // [0, 1, 2, 3]
var listNull;
print ( [-1,...listSpread] ); // [-1, 0, 1, 2, 3]
print ( [-1,...?listNull] ); // [-1]
  
// Список с if
bool isAdmin = false;
bool isGuest = false;
var permissionList = [isGuest ? 'guest' : 'user' , if ( isAdmin ) 'admin' ];
print ( permissionList ); // [user]
isAdmin = true;
var permissionListNew = [isGuest ? 'guest' : 'user' , if ( isAdmin ) 'admin' ];
print ( permissionListNew ); // [user, admin]
  
// Список с for
List<int> intList = [1,2,3,4,5];
List<String> strList = [ '-' , for ( var i in intList ) 'Value $i' ];
print ( strList ); // [-, Value 1, Value 2, Value 3, Value 4, Value 5]

Свойства и методы списков

Основные свойства списков:

  • first: первый элемент

  • last: последний элемент

  • length: длина списка

  • reversed: список, в котором все элементы находятся в противоположном порядке

  • isEmpty: true, если список пуст

Основные методы списков:

  • add(E value): добавляет элемент в конец списка

  • addAll(Iterable<E> iterable): добавляет в конец списка другой список

  • clear(): удаляет все элементы из списка

  • indexOf(E element): возвращает первый индекс элемента

  • insert(int index, E element): вставляет элемент на определенную позицию

  • remove(Object value): удаляет объект из списка (удаляется только первое вхождение элемена в список)

  • removeAt(int index): удаляет элементы по индексу

  • removeLast(): удаляет последний элемент списка

  • forEach(void f(E element)): производит над элементами списка некоторое действие, которое задается функцией-параметром, аналоги цикла for..in

  • sort(): сортирует список

  • sublist(int start, [ int end ]): возвращает часть списка от индекса start до индекса end

  • contains(Object element): возвращает true, если элемент содержится в списке

  • join([String separator = "" ]): объединяет все элементы списка в строку. Можно указать необязательный параметр separator, который будет раздлять элементы в строке

  • skip(int count): возвращает коллекцию, в которой отсутствуют первые count элементов

  • take(int count): возвращает коллекцию, которая содержит первые count элементов

  • where(bool test(E element)): возвращает коллекцию, элементы которой соответствуют некоторому условию, которое передается в виде функции

Set - Множество

Представляет из себя неупорядоченный набор уникальных элементов.

// Множество
var langSet = { 'PHP' , 'SQL' , 'JavaScript' };
var softSet = { 'VS Code' , 'HeidiSQL' };
langSet.add ( 'HTML' );
langSet.addAll ( { 'CSS' , 'Dart' } );
print ( langSet ); // {PHP, SQL, JavaScript, HTML, CSS, Dart}
var skillSet = <String>{};
skillSet.addAll ( softSet );
skillSet.addAll ( langSet );
print ( skillSet ); // {VS Code, HeidiSQL, PHP, SQL, JavaScript, HTML, CSS, Dart}
  
// Неизменяемое множество
final setConst = const { 'PHP' , 'SQL' , 'JavaScript' };

Свойства и методы множества

Основные свойства наборов:

  • first: возвращает первый элемент

  • last: возвращает последний элемент

  • length: возвращает длину набора

  • isEmpty: возвращает true, если набор пуст

Основные методы наборов:

  • add(E value): добавляет элемент в набор

  • addAll(Iterable<E> iterable): добавляет в набор другую коллекцию

  • clear(): удаляет все элементы из набора

  • difference(Set<Object> other): возвращает разность текущего набора и набора other в виде другого набора

  • intersection(Set<Object> other): возвращает пересечение текущего набора и набора other в виде другого набора

  • remove(Object value): удаляет объект из набора

  • removeAll(Iterable<Object> elements): удаляет из набора все элементы коллекции elements

  • union(Set<E&g; other): возвращает объединение двух наборов - текущего и набора other

  • contains(Object element): возвращает true, если элемент содержится в наборе

  • join([String separator = "" ]): объединяет все элементы набора в строку. Можно указать необязательный параметр separator, который будет раздлять элементы в строке

  • skip(int count): возвращает коллекцию, в которой отсутствуют первые count элементов

  • take(int count): возвращает коллекцию, которая содержит первые count элементов

  • where(bool test(E element)): возвращает коллекцию, элементы которой соответствуют некоторому условию, которое передается в виде функции

// Словари
Map<String, String> mapString = {
  'two': 'два',
  'four': 'четыре',
  'eight': 'восемь'
};
print ( mapString ); // {two: два, four: четыре, eight: восемь}
Map<int, String> mapInteger = {
  2: 'two',
  4: 'four',
  8: 'eight',
};
print ( mapInteger ); // {2: two, 4: four, 8: eight}
var mapAdd = Map();
mapAdd['two'] = 'два';
mapAdd['four'] = 'четыре';
mapAdd['eight'] = 'восемь';
print ( mapAdd ); // {two: два, four: четыре, eight: восемь}
  
// С множеством и словарями также возможны использовать if, for, spread и т.п.

Свойства и методы Map

Основные свойства:

  • entries: возвращает объект Iterable<MapEntry<K, V>>, который представляет все элементы Map

  • keys: возвращает объект Iterable<K>, который представляет все ключи Map

  • values: возвращает объект Iterable<V>, который представляет все значения Map

  • length: возвращает количество элементов в Map

  • isEmpty: возвращает true, если Map пуст

Основные методы:

  • addAll(Map<K, V> other): добавляет в Map другой объект Map

  • addEntries(Iterable<MapEntry<K, V>> newEntries): добавляет в Map коллекцию Iterable<MapEntry<K, V>>

  • clear(): удаляет все элементы из Map

  • containsKey(Object key): возвращает true, если Map содержит ключ key

  • containsValue(Object value): возвращает true, если Map содержит значение value

  • remove(Object key): удаляет из Map элемент с ключом key