Как преобразовать список в карту в дротике

Я ищу готовый способ преобразования списка в карту в Dart.

Например, в python вы можете:

l= [ ('a',(1,2)), ('b',(2,3)), ('c',(3,4) ) ]
d=dict(l)
==> {'a': (1, 2), 'c': (3, 4), 'b': (2, 3)}

Функция dict ожидает список из пары. Для каждой пары первый элемент используется как ключ, а второй - как данные.

В Dart я видел следующий метод для List: asMap(), но он не выполняет то, что я ожидаю: он использует индекс списка как ключ. Мои вопросы:

  • Знаете ли вы что-нибудь в библиотеках Дарта, чтобы это сделать?
  • Если нет, планируете ли вы добавить такую функцию в основной lib?

Предложение:

List.toMap() //same as python dict.
List.toMap( (value) => [ value[0], value[1] ] ) //Using anonymous function to return a key and a value from a list item.

Спасибо и с уважением,

никола

Ответ 1

Вы можете использовать Map.fromIterable:

var result = Map.fromIterable(l, key: (v) => v[0], value: (v) => v[1]);

или сбор за (начиная с версии 2.3):

var result = { for (var v in l) v[0]: v[1] };

Ответ 2

В Dart 1.1 вы можете использовать этот конструктор Map:

new Map.fromIterable(list, key: (v) => v[0], value: (v) => v[1]);

Это будет ближе всего к вашему первоначальному предложению.

Ответ 3

Еще нет концепции кортежей или пар в дротике (кроме двух элементов Iterable). Если у Дарта была такая концепция, тогда вопрос 7088 предлагает решить это с помощью конструктора Map.fromPairs.