发布
社区首页 >问答首页 >Dart -如何将嵌套的Map<dynamic、dynamic>转换为Map<String、dynamic>

Dart -如何将嵌套的Map<dynamic、dynamic>转换为Map<String、dynamic>
EN

Stack Overflow用户
提问于 2021-12-21 11:49:28
回答 2查看 1.2K关注 0票数 0

我知道如何使用Map<dynamic, dynamic> ()方法将Map.from转换为Map<String, dynamic>。但是,如果我有未指定数量的嵌套映射呢?如何将所有潜在的子级也从Map<dynamic, dynamic>转换为Map<String, dynamic>

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-12-21 12:35:57

您可以使用递归方法来解决这个问题,其中Map类型的所有映射值也都是递归转换的。

代码语言:javascript
代码运行次数:0
复制
// recursively convert the map
Map<String, dynamic> convertMap(Map<dynamic, dynamic> map) {
  map.forEach((key, value) {
    if (value is Map) {
      // it's a map, process it
      value = convertMap(value);
    }
  });
  // use .from to ensure the keys are Strings
  return Map<String, dynamic>.from(map);
  // more explicit alternative way:
  // return Map.fromEntries(map.entries.map((entry) => MapEntry(entry.key.toString(), entry.value)));
}

// example nested map with dynamic values
Map<dynamic, dynamic> nestedMap = {
  'first': 'value',
  'second': {
    'foo': 'bar',
    'yes': 'ok',
    'map': {'some': 'value'},
  }
};

// convert the example map
Map<String, dynamic> result = convertMap(nestedMap);
print(result);
票数 1
EN

Stack Overflow用户

发布于 2022-02-20 01:07:45

与fravolt的答案相同,但我无法在注释中添加代码:

Map.forEach不通过引用来处理值。你可以改为:

代码语言:javascript
代码运行次数:0
复制
// recursively convert the map
Map<String, dynamic> convertMap(Map<dynamic, dynamic> map) {
    for (var key in map.keys) {
      if (map[key] is Map) {
        map[key] = convertMap(map[key]);
      }
    }  // use .from to ensure the keys are Strings
  return Map<String, dynamic>.from(map);
  // more explicit alternative way:
  // return Map.fromEntries(map.entries.map((entry) => MapEntry(entry.key.toString(), entry.value)));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70434976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档