【发布时间】:2021-04-13 15:10:53
【问题描述】:
我有一个 set>> 并且我必须将其转换为 map
【问题讨论】:
标签: flutter types type-conversion
我有一个 set>> 并且我必须将其转换为 map
【问题讨论】:
标签: flutter types type-conversion
Map 在概念上类似于Set,除了它允许您使用任意键(在 Set 中,从零到 Set.length 的数字索引用作键)并允许插入双元素(而 Set 没有)。然后,您可以创建一个使用 Set 的相同索引作为键的 Map。
例子:
Set<dynamic> set = {"a", "b"};
Map<String, dynamic> map = {};
for (var index = 0; index < set.length; index++) {
map[index.toString()] = set.elementAt(index);
}
print(map); //print: {0: a, 1: b}
但是,通常对于 Dart 中的 序列化(例如在 firebase 数据库中,或使用 dart:convert 包的 json 解码,或 dart-javascript 互操作)接受/使用以下类型,通常称为 primitives(在 dart 序列化的上下文中):
String,int(在某些情况下甚至 double,例如被 firebase 数据库的 DatabaseReference.set() 接受)bool,Map 带字符串键ListMap 和 List又可以包含任何原始类的对象,例如其他 Map、List 等(甚至参数类型实际上可以不同于动态)。
所以在你的情况下,从 Set 到 List 的转换也可以。
set.toList();
对于其余部分,您的数据结构已经由原语组成,即可以在 firebase 数据库或其他系统中进行序列化。
然后您可以完全忽略您的 Map(或 List,如果您愿意)具有参数类型 List <Map<etc>> 而不是 dynamic 的事实。
【讨论】:
映射本身将存储多个键值对数据,在一个列表中意味着您有一个包含多个映射的列表,然后您又在一个集合中拥有它。你不能完全将它转换为单个对象,你可以做的是迭代这些集合并得到你想要的我想, 您可能想在集合上运行一个循环,在循环内部循环列表,这将为您提供每个地图对象。
【讨论】: