Инициализация коллекций, списков, массивов и хеш-таблиц

Объявление массивов с помощью сокращенной записи

Простейшие коллекции представлены в dart классом List, они могут быть фиксированного или динамического размера, и содержать типизированные или произвольные объекты. Доступ к элементам осуществляется, как с помощью итератора, так и по индексу элемента. Чтобы объявить и инициализировать такой массив, можно воспользоваться сокращенной записью с помощью квадратных скобок:


// объявляем переменную dynamicList и инициализируем ее, как массив:
var dynamicList = [1, 2, 3, "one", "two"];

//получим в выводе [1, 2, 3, one, two]
print(dynamicList);

в таком случае, будет создан динамический массив с не типизированными элементами, то есть будет возможно добавлять любое количество элементов любого типа. Так же стоит отметить, что даже если мы объявим переменную как типизированный список и инициализируем ее с помощью записи [a, b, ...], то все равно получим не типизированный список, т.е.:


// объявляем переменную arrayOfDoubles как список вещественных чисел, и инициализируем ее следующими значениями:
List<double> arrayOfDoubles = [2.5, 5.0, 7.5, 10.0];
// добавляем к списку новый элемент - строку
arrayOfDoubles.add("upps!");

//получим в выводе [2.5, 5.0, 7.5, 10.0, upps!]
print(arrayOfDoubles);

Инициализация массивов с помощью конструктора List.from()

Для того, чтобы объявить и инициализировать типизированный список необходимо воспользоваться конструктором List.from():


List<Duration> arrayOfDurations = new List<Duration>.from([new Duration({days: 1), new Duration({days: 7), new Duration({days: 30)]);

print(arrayOfDurations);

Но, если мы объявляем типизированный список, то уже необходимо обращать внимание но те элементы, который, мы будем к нему добавлять, то есть:


// будет сгенерирована ошибка
List<double> arrayOfDouble1 = new List<Duration>.from([1.0, 2.0, "exceptions"]);

List<double> arrayOfDouble1 = new List<Duration>.from([1.0, 2.0]);
// будет сгенерирована ошибка
arrayOfDouble2.add("exception");

Ну и последний вариант инициализации, это сначало объявить, а потом поочередно добавить необходимые элементы:


List<String> arrayOfStrings = new List<String>();
arrayOfString.add("apple");
arrayOfString.add("bannan");
arrayOfString.add("orange");

Коллекции других типов, такие как очереди, наборы, и т.д. можно так же инициализировать с помощью конструкторов Queue.from(), Set.from() или добавляя элементы.

Инициализация ассоциативных массивов

Для инициализации ассоциативных массивов (или хеш-таблиц) существует отдельный сокращенный синтаксис, с использованием фигурных скобок:


Map<String, Date> mapOfDates = {
    "today": new Date.now(),
    "yesterday": new Date.now().add(new Duration(days: -1)),
    "tomorrow": new Date.now().add(new Duration(days: 1)),
  };
  print(mapOfDates);