Dart: создать список от 0 до N

Как легко создать целый ряд целых чисел в дротике? Например:

// throws a syntax error :)
var list = [1..10];

Ответы

Ответ 1

Вы можете использовать конструктор List.generate:

var list = new List<int>.generate(10, (i) => i + 1);

Вы можете альтернативно использовать генератор:

/// the list of positive integers starting from 0
Iterable<int> get positiveIntegers sync* {
  int i = 0;
  while (true) yield i++;
}
void main() {
  var list = positiveIntegers
      .skip(1)   // don't use 0
      .take(10)  // take 10 numbers
      .toList(); // create a list
  print(list);   // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}

Ответ 2

Насколько я знаю, в Dart нет родного аналогичного способа сделать это. Однако вы можете создать свой собственный класс Range или использовать https://pub.dartlang.org/packages/range, если вы не против зависимости.

Олов Лассус недавно написал статью о реализации собственного класса Range

редактировать: еще лучший способ, о котором я только что подумал:

Iterable<int> range(int low, int high) sync* {
  for (int i = low; i < high; ++i) {
    yield i;
  }
}

void main() {
  for(final i in range(1, 20)) {
    print(i);
  }
}

Ответ 3

Вы также можете использовать функцию Dart Iterable.generate для создания диапазона между 0..n-1

var list = Iterable<int>.generate(10).toList()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]