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

如何在Dart中构建嵌套数据结构的映射列表?

优化层级数据转映射列表的实现方案

问题背景

需要将List<Foo>结构中的每个Bar与所属Foo的someVal关联,生成统一的映射列表,现有实现使用了嵌套循环,希望得到更简洁高效的方案。

优化后的实现

利用Dart的map+expand链式调用,直接完成层级展开与映射,无需嵌套循环:

class Bar{
  String someVal;
  int num;

  Bar(this.someVal, this.num);
}

class Foo{
  String someVal;
  List<Bar> bars;

  Foo(this.someVal, this.bars);
}

void main()
{
  Bar bar1 = Bar("val1", 3);
  Bar bar2 = Bar("val2", 5);
  Bar bar3 = Bar("val3", 2);
  Foo foo1 = Foo("someString1", [bar1, bar2, bar3]);

  Bar bar4 = Bar("val4", 2);
  Bar bar5 = Bar("val5", 3);
  Bar bar6 = Bar("val6", 1);
  Foo foo2 = Foo("someString2", [bar4, bar5, bar6]);

  List<Foo> foos = [foo1, foo2];
  
  // 优化后的核心代码
  final namedBars = foos.expand((foo) => 
    foo.bars.map((bar) => {"someVal": foo.someVal, "bar": bar})
  ).toList();

  // 验证输出结果
  namedBars.forEach(print);
}

优化说明

  • 移除嵌套循环:通过expand将每个Foo对应的Map列表直接展开为扁平列表,无需手动维护索引、计数等变量
  • 减少中间变量:无需额外创建allBars、countsBar这类临时集合,直接在遍历过程中完成关联映射
  • 逻辑更直观:每个Foo的someVal直接与自身包含的Bar绑定,代码可读性更强
  • 性能更高效:避免了原方案中多次遍历列表的操作,仅需两次遍历(一次遍历所有Foo,一次遍历每个Foo下的Bar)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:20:33