List - methods

Метод getRange(start, end) используется для того, чтобы выделить определенную часть списка и работать с ней как с отдельной коллекцией.

Простыми словами: вы говорите списку «дай мне элементы с позиции A до позиции B».

Как это работает (основные правила):

  1. start — индекс элемента, с которого начинаем (включительно).

  2. end — индекс, на котором останавливаемся (не включая его).

  3. Результат — он возвращает не новый список List, а Iterable (ленивую последовательность). Чтобы превратить её в обычный список, в конце часто добавляют .toList().


Наглядный пример:

Представьте, что у вас есть список из 5 элементов: ['А', 'Б', 'В', 'Г', 'Д'] Индексы: 0 1 2 3 4

Если вы вызовете getRange(1, 4), программа возьмет элементы с индексами 1, 2 и 3. Индекс 4 (буква 'Д') не войдет.

Пример в коде (Dart):

Dart

void main() {
  List<String> fruits = ['яблоко', 'банан', 'груша', 'слива', 'киви'];

  // Берем фрукты с 1-го по 3-й индекс (не включая 4-й)
  var range = fruits.getRange(1, 4); 

  print(range); // Выведет: (банан, груша, слива)
  
  // Если нужен именно список:
  List<String> subList = range.toList();
}

Зачем это нужно?

  • Для обработки кусками: Например, если у вас 1000 записей, а вы хотите отобразить только первые 10 (пагинация).

  • Для экономии памяти: getRange не копирует данные сразу, он просто дает «окно» в существующий список.

  • Для безопасности: Если вы хотите передать часть данных в другую функцию, но не хотите, чтобы она имела доступ ко всему списку.

Важные нюансы:

  • Если вы укажете start больше, чем end, или выйдете за границы списка — программа выдаст ошибку (RangeError).

  • Если исходный список изменится (например, вы удалите из него элементы), работа с getRange может привести к ошибкам, так как он ссылается на оригинал.

. indexWhere(test, [start])

Ищет первый элемент, который подходит под условие, двигаясь от начала к концу.

  • test: функция-условие (возвращает true или false).

  • start (необязательно): с какого индекса начинать поиск. По умолчанию — 0.

  • Результат: индекс первого найденного элемента. Если ничего не найдено, вернет -1.

Пример:

У вас список покупок, и вы хотите найти индекс первого товара, который стоит дороже 100 рублей.

Dart


2. lastIndexWhere(test, [start])

Ищет последний элемент, который подходит под условие, двигаясь от конца к началу (или от указанного start вниз до 0).

  • test: функция-условие.

  • start (необязательно): индекс, с которого начинать поиск «назад». По умолчанию — конец списка.

  • Результат: индекс последнего подходящего элемента. Если не найдено — -1.

Пример:

Dart


В чем главная фишка параметра [start]?

Он позволяет «проигнорировать» часть списка.

  • В indexWhere: если вы укажете indexWhere(condition, 2), поиск начнется только с третьего элемента (индекс 2) и пойдет вправо.

  • В lastIndexWhere: если вы укажете lastIndexWhere(condition, 2), поиск начнется с третьего элемента и пойдет влево к началу.

Коротко:

Метод

Откуда ищет

Что возвращает

indexWhere

Слева направо

Индекс первого совпадения

lastIndexWhere

Справа налево

Индекс последнего совпадения

Как это работает «на пальцах»:

Представьте, что у вас есть куча деталей конструктора, и вы соединяете их одну за другой, пока не получится одна цельная фигура.

  1. Берется первый элемент списка (это начальный результат).

  2. Берется второй элемент.

  3. Они «склеиваются» вашей функцией combine.

  4. Полученный результат «склеивается» с третьим элементом, и так до конца.


Пример 1: Сумма чисел

Dart

Пример 2: Самое длинное слово

Вы можете использовать reduce, чтобы найти какой-то экстремум (максимум, минимум, самую длинную строку):

Dart


Важные ограничения:

  1. Тип данных не меняется: Если у вас список чисел int, то и результатом reduce может быть только int. Вы не можете превратить список строк в число через reduce (для этого есть метод fold).

  2. Список не должен быть пустым: Если вызвать reduce на пустом списке, программа упадет с ошибкой.

  3. Один элемент: Если в списке всего один элемент, reduce просто вернет его, даже не запуская вашу функцию.

Last updated