【问题标题】:How to transform List into Map of List如何将 List 转换为 List 的 Map
【发布时间】:2021-08-03 17:34:20
【问题描述】:

我有一个包含此数据的列表,我想在 Map 中将其转换为事件变量(_id、标题、日期、活动),这是我恢复的数据示例:

[
   {
      "_id":8,
      "title":"Matin",
      "date":"2021-08-04T00:00:00.000Z",
      "active":1
   },
   {
      "_id":9,
      "title":"Après-midi",
      "date":"2021-08-04T12:00:00.000Z",
      "active":1
   },
   {
      "_id":11,
      "title":"Matin",
      "date":"2021-08-05T00:00:00.000Z",
      "active":1
   },
   {
      "_id":12,
      "title":"Après-midi",
      "date":"2021-08-05T12:00:00.000Z",
      "active":1
   },
   {
      "_id":6,
      "title":"Matin",
      "date":"2021-08-11T00:00:00.000Z",
      "active":1
   },
   {
      "_id":7,
      "title":"Après-midi",
      "date":"2021-08-11T12:00:00.000Z",
      "active":1
   },
   {
      "_id":4,
      "title":"Matin",
      "date":"2021-08-17T00:00:00.000Z",
      "active":1
   },
   {
      "_id":10,
      "title":"Matin",
      "date":"2021-08-17T00:00:00.000Z",
      "active":1
   }
]

在每个值中,我都有一个包含年、月、日和时间的日期,我想在不考虑小时的情况下对日期进行分组,如下所示:

"2021-08-04": [
{
      "_id":8,
      "title":"Matin",
      "date":"2021-08-04T00:00:00.000Z",
      "active":1
   },
   {
      "_id":9,
      "title":"Après-midi",
      "date":"2021-08-04T12:00:00.000Z",
      "active":1
   }
],
"2021-08-05": [
[
   {
      "_id":11,
      "title":"Matin",
      "date":"2021-08-05T00:00:00.000Z",
      "active":1
   },
   {
      "_id":12,
      "title":"Après-midi",
      "date":"2021-08-05T12:00:00.000Z",
      "active":1
   }
]

我尝试用 Map.fromIterable 做一些事情,但我有一些错误...... 如果有人可以帮助我,谢谢!

【问题讨论】:

    标签: flutter dictionary dart


    【解决方案1】:

    我暴力破解了您需要的解决方案类型。如果存储的日期格式没有改变,所提供的解决方案肯定会起作用。

    void converter(var data) {
      var req={};
      for (int i = 0; i < data.length; i++) {
        var date=data[i]["date"].toString().substring(0,10);
        if(!req.containsKey(date))
          req[date]=[];
        req[date].add(data[i]);
      }
      print(req);
    }
    

    【讨论】:

      【解决方案2】:

      当您使用颤振时,有一个包可以处理这些东西。 https://pub.dev/packages/collection

      你需要 groupby。

      我做了类似的事情,如果 api 仍然相同,我想知道。总之这里是sn-p。

      .map(
              (List<Appointment> appointments) {
                appointments.sort(
                  (Appointment a, Appointment b) {
                    if (a.appointmentdate
                        .difference(b.appointmentdate)
                        .isNegative) return -1;
                    return 1;
                  },
                );
                return appointments;
              },
            ).distinct();
      

      【讨论】:

        【解决方案3】:

        考虑到 data 是您列出的 List&lt;Map&lt;String, Object&gt;&gt; 变量,即假设您的数据不是 JSON 对象,我会这样做:

        Map<String, List<Map<String,Object>>> myTfData = {}
        data.forEach(
            (value) {
              var myDate = value['date'] as String;
              if(myTfData.containsKey(myDate)) myTfData[myDate] = [];
              myTfData[myDate]!.add(value);
            }
          );
        

        您会根据要求获得一个Map&lt;String, List&lt;Map&lt;String,Object&gt;&gt;&gt; 对象。

        【讨论】:

        • Iterable.forEach 不返回值。
        猜你喜欢
        • 2017-07-14
        • 2013-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-23
        • 2021-02-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多