【问题标题】:set<list<map<string,dynamic>>> to map<string,dynamic> [closed]set<list<map<string,dynamic>>> 到 map<string,dynamic> [关闭]
【发布时间】:2021-04-13 15:10:53
【问题描述】:

我有一个 set>> 并且我必须将其转换为 map 以上传 firebase。有人可以帮忙吗? 注意:我是这个网站的新手,我可能会犯错误请警告我

【问题讨论】:

    标签: flutter types type-conversion


    【解决方案1】:

    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 带字符串键
    • List

    Map 和 List又可以包含任何原始类的对象,例如其他 Map、List 等(甚至参数类型实际上可以不同于动态)。

    所以在你的情况下,从 Set 到 List 的转换也可以。

    set.toList();
    

    对于其余部分,您的数据结构已经由原语组成,即可以在 firebase 数据库或其他系统中进行序列化。 然后您可以完全忽略您的 Map(或 List,如果您愿意)具有参数类型 List &lt;Map&lt;etc&gt;&gt; 而不是 dynamic 的事实。

    【讨论】:

      【解决方案2】:

      映射本身将存储多个键值对数据,在一个列表中意味着您有一个包含多个映射的列表,然后您又在一个集合中拥有它。你不能完全将它转换为单个对象,你可以做的是迭代这些集合并得到你想要的我想, 您可能想在集合上运行一个循环,在循环内部循环列表,这将为您提供每个地图对象。

      【讨论】:

        猜你喜欢
        • 2021-03-25
        • 1970-01-01
        • 2021-02-11
        • 2021-09-25
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 2021-06-09
        • 2021-09-01
        相关资源
        最近更新 更多