【问题标题】:How to retrieve a Map from a Map in dart efficiently?如何有效地从飞镖地图中检索地图?
【发布时间】:2020-04-25 07:35:12
【问题描述】:

我有一个从 Map<String,dynamic> 类型的 json.decode 返回的地图

动态部分包含另一个地图,我想将其放在单独的变量中。我设法通过以下方式做到这一点:

Map<DateTime, List<DayOffDto>> mapToReturn = Map();

    Map<String, dynamic> responseBody = json.decode(
      response.body,
      reviver: _reviver,
    );
    if (responseBody == null) {
      throw NoDataServerException();
    }
    responseBody.entries.forEach((element) {
     Map map = element.value;
      //map.values;
      map.entries.forEach((element2) {
        mapToReturn[element2.key] = element2.value;
      });
    });
//mapToReturn  contains now the extracted map from responseBody

reviver 功能只是为我做了一些转换

_reviver(dynamic key, dynamic value) {
    if (key != null && value is Map && (key as String).contains("-")) {
      var object = value;

      final DayOffDto dayOffDto = DayOffDto.fromFirebase(
          key_firebase: key as String,
          parsedJson: value,
          rota: rotaParam,
          chosenYear: yearParam);
      DateTime datetime = Helper.getDateTimeFromDayNumber(
        dayOffDto.dayNumber,
        dayOffDto.year,
      );
      Map<DateTime, List<DayOffDto>> internalMap = LinkedHashMap();
      internalMap[datetime] = [dayOffDto];
      return internalMap;
    }

    return value;}

我认为这不是提取 .对优化代码有任何想法吗? responseBody.values 返回Iterable&lt;V&gt;

所以当我这样做的时候 mapToReturn = responseBody.values我收到一个错误

【问题讨论】:

  • 也许 responseBody.values 符合您的要求?
  • 本教程可能会给你一些提示:levelup.gitconnected.com/…
  • responseBody.values 返回 Iterable

标签: flutter dart


【解决方案1】:

使用Map 有时会很困难。我想告诉你,有像mapToReturn = responseBody.values 这样简单的东西,但到今天为止,还没有(我能找到)。

但是,我可以给你一小段代码,它的作用与你的第一个代码块相同。

由于您没有使用第一张地图的keys,而不是responseBody.entries,您应该使用responseBody.values。所以代码块最终会是这样的:

responseBody.values.forEach((value) {
  return value is Map<DateTime, List<DayOffDto>>
      ? mapToReturn.addAll(value)
      : null;
});

如果你完全确定 Type 的值(你应该使用 reviver),你可以只写一行代码。

responseBody.values.forEach((value) => mapToReturn.addAll(value));

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 2023-03-31
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多