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

如何在Dart中对Iterable进行部分map转换?

Dart列表转换:映射同时过滤指定元素

问题说明

给定Dart列表:

final numbers = [1, 0, -1, 1, -3, 0];

需要生成新列表,规则如下:

  • 元素1转换为布尔值true
  • 元素0转换为布尔值false
  • 其他元素直接跳过

最终结果需满足测试断言:

expect(newList, equals([true, false, true, false]));

实现方案

方法1:使用 expand 方法

expand 允许每个元素返回一个可迭代对象,返回空列表即可跳过当前元素,适合在一次遍历中完成过滤和映射:

final newList = numbers.expand((num) {
  if (num == 1) return [true];
  if (num == 0) return [false];
  return []; // 返回空列表实现跳过
}).toList();

方法2:使用 fold 方法

通过累加器逐步构建目标列表,根据元素值决定是否添加转换后的值:

final newList = numbers.fold<List<bool>>([], (acc, num) {
  if (num == 1) {
    acc.add(true);
  } else if (num == 0) {
    acc.add(false);
  }
  // 非1/0元素不做处理,直接跳过
  return acc;
});

方法3:结合 where 和 map(简洁版)

先过滤出需要处理的元素,再统一映射转换,代码更简洁直观:

final newList = numbers
    .where((num) => num == 1 || num == 0)
    .map((num) => num == 1) // 1转true,0自然转false
    .toList();

以上三种方法均能满足需求,其中方法3逻辑最清晰、代码最简洁,推荐优先使用;方法1和2适合更复杂的转换场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 18:40:16