【问题标题】:Getting every key entry in nested map获取嵌套映射中的每个键条目
【发布时间】:2021-02-06 10:39:47
【问题描述】:

我有一个嵌套地图,如下所示:

{ "name":"Italien", "documentId":a4c3jzNeYIaz3MrPWh1c,
“孩子们”:[ { "名称":"隆巴迪", ], “documentId”:XM0SBotZiL7YwCWVptaF, “孩子们”:[ { "name":"布雷西亚", “documentId”:Cb6NMCTCs5kbdjbmlpyO, “孩子们”:[ { "名称":"中殿", “documentId”:2cZuhJjRHejA1ztPr2iS, “孩子们”:[ ] }, ] }, ] }, ] }

这可能会永远持续下去。所以我需要获取 documentId 的每一个值,即使是在深层嵌套的孩子中。我无法显式调用键,因为地图始终是动态的并且会随着时间而变化。

【问题讨论】:

  • 我不完全确定你想要什么。根据您的示例输入,您能写出您想要的结果吗?
  • 最后我只想有一个这样的地图: { 'documentId' : 'a4c3jzNeYIaz3MrPWh1c', 'documentId' : ' XM0SBotZiL7YwCWVptaF' , 'documentId' : 'Cb6NMCTCs5kbdjbmlpyO' , 'documentId' : '2cZuhJjRHejA1ztPr2iS' }
  • 地图不支持使用同一个键的多个条目。
  • 好吧,那么只是一个 List 包含所有提到的 documentIds

标签: json flutter dictionary dart


【解决方案1】:

你可以像这样使用递归:

handleMap(Map map, [String key]) {
  map.foreach((key, value) {
  
    if (value is Map) handleMap(value, key);
    else if (value is List) handleList(value, key);
    else handleValue(value, key);
  });
}

handleList(List list, [String key]) {
  list.foreach((entry) {
    
    if (entry is Map) handleMap(entry);
    else if (entry is List) handleList(entry);
    else handleValue(entry);
  });
}

handleValue(dynamic value, [String key]) {
  ...
}

调用它:

handleMap(data);

【讨论】:

  • 很高兴听到这个消息!请务必将此问题标记为已回答:)
猜你喜欢
  • 1970-01-01
  • 2020-01-27
  • 2013-12-05
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多