如何在Dart中将列表转换为Map

rxztt3cl  于 2023-01-15  发布在  其他
关注(0)|答案(9)|浏览(220)

我正在寻找一种现成的方法来将一个列表转换为 dart 中的Map。
例如在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()**,但它没有做我期望的事情:它使用列表索引作为关键字。我的问题:

  • 你知道达特图书馆里有什么东西可以做这个吗?
  • 如果没有,有没有计划在核心库中添加这样的特性?

提议:

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.

感谢并问候您!
尼古拉

ac1kyiln

ac1kyiln1#

您可以使用Map.fromIterable

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

或 * 收集对象 *(从Dart 2.3开始):

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

50few1ms2#

在Dart 1.1中,可以使用Map的构造函数:

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

这将是最接近你原来的建议。

i7uaboj4

i7uaboj43#

对于Dart 2.3及更高版本,

解决办法有很多,但最简单的是:

    • 1-使用asMap()函数**
List list = ['steve', 'bill', 'musk'];
Map map = list.asMap();
print(map);
    • 输出:**
{0: steve, 1: bill, 2: musk}
    • 2-在Map内使用for-in集合**Map map = {};
List list = ['steve', 'bill', 'musk'];
Map map = {for (var item in list) '$item' : 'valueOf$item'};
print(map);
    • 输出:**
{steve: valueOfsteve, bill: valueOfbill, musk: valueOfmusk}

希望能有所帮助。

8fsztsew

8fsztsew4#

另一种可能是使用Map.fromEntries()构造函数:

final result = Map.fromEntries(l.map((value) => MapEntry(value[0], value[1])));
rt4zxlrg

rt4zxlrg5#

详情

  • 106年之前的扑动1.26.0 - 18.0

溶液
/libs/扩展名/列表. dart

extension MapFromList<Element> on List<Element> {
  Map<Key, Element> toMap<Key>(
          MapEntry<Key, Element> Function(Element e) getEntry) =>
      Map.fromEntries(map(getEntry));

  Map<Key, Element> toMapWhereKey<Key>(Key Function(Element e) getKey) =>
      Map.fromEntries(map((e) => MapEntry(getKey(e), e)));
}

用法

import 'package:myApp/libs/extensions/list.dart';

final list = [1,2,3,4];
print(list.toMap((e) => MapEntry(e-1, e)));  // {0: 1, 1: 2, 2: 3, 3: 4}
print(list.toMapWhereKey((e) => "str $e"));  // {str 1: 1, str 2: 2, str 3: 3, str 4: 4}
eqqqjvef

eqqqjvef6#

这可能不直接相关的答案,但是,如果有任何人想转换。

var list = ['fee','fi','fo','fum'];

到一张Map,

var map = {0:'fee', 1:'fi', 2:'fo', 3:'fum'};

您可以使用

var map = list.asMap();

附言

此Map不可编辑

zxlwwiss

zxlwwiss7#

dart中还没有元组或对的概念(除了两个元素的Iterable)。如果Dart有这样的概念,那么issue 7088建议用Map.fromPairs构造函数来解决这个问题。

q5lcpyga

q5lcpyga8#

这是如何你可以转换列表到Map

void main() {
  var list = [99, 25, 45, 11, 5, 125, 50];
  SplayTreeMap numbers = new SplayTreeMap<int, int>();
  numbers.addAll(list.asMap());
  print(numbers);
}
c9x0cxw0

c9x0cxw09#

List list = [Gum, 0.95, Soda, 1.05, Chips, 1.99];
Map map1 = {};
for (int i = 0; i < list.length ; i += 2) {
   map1[list[i]] = list[i + 1];  }
print(map1);

输出将为:

{Gum: 0.95, Soda: 1.05, Chips: 1.99}

相关问题