You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Sqlite rawQuery返回的查询结果映射为指定格式的Map<String, List>

问题原因

你的原有写法每次遍历都会直接为对应key赋值新列表,会直接覆盖该key之前已有的数据,因此同个key的内容不会合并,只会保留最后一次赋值的结果。

实现代码

基础循环写法(可读性最高)

Map<String, List> _map = {};
for (var item in result) {
  // 取出作为key的placeCol字段值
  String key = item['placeCol'] as String;
  // 取出需要存入列表的字段值,如需存多个字段可改为 [item['NameCol'], item['SubDataCol']]
  var targetValue = item['NameCol'];

  if (_map.containsKey(key)) {
    // key已存在,直接往已有列表追加值
    _map[key]!.add(targetValue);
  } else {
    // key不存在,初始化新列表
    _map[key] = [targetValue];
  }
}

简洁写法(基于Dart内置方法)

使用putIfAbsent方法可以简化判断逻辑:

Map<String, List> _map = {};
for (var item in result) {
  String key = item['placeCol'] as String;
  // key不存在时自动创建空列表,直接向列表追加元素
  _map.putIfAbsent(key, () => []).add(item['NameCol']);
}

函数式写法

用fold方法可以快速完成转换:

final _map = result.fold<Map<String, List>>({}, (acc, item) {
  final key = item['placeCol'] as String;
  acc[key] = (acc[key] ?? [])..add(item['NameCol']);
  return acc;
});

内容的提问来源于stack exchange,提问作者Alex Apps

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 00:48:02