2013-05-30 2 views
2

Я ищу на-полке способ конвертировать список в карту в дартс.Как преобразовать список в карту в Дарт

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

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

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

В Dart Я видел следующий метод для списка: 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. 

Спасибо и наилучшие пожелания,

Николя

ответ

2

Там нет такого метода, и я не думаю, что есть какой-либо план, чтобы добавить такую ​​функцию. Вы можете file an issue, если считаете это важным.

Документация List.asMap является:

Возвращает неизменяемый вид Карта this.

Он имеет индексы этого списка в виде ключей и соответствующих элементов в качестве значений.

Однако, вы можете делать то, что вы хотите, как это:

Map dict(List l) { 
    final m = {}; 
    l.forEach((e){ m[e[0]] = e[1]; }); 
    return m; 
} 

main(){ 
    print(dict([["a", "b"], ["c", "d"]])); // prints {a: b, c: d} 
} 
0

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

+0

+ Решение Alexandre, даже на основе 2-х элементов, подходит для меня, это делает работу. Я использую его для себя. – Nico

8

В Dart 1.1, вы можете использовать this constructor карты:

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

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

Смежные вопросы