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

Dart如何将二维列表解包拼接为一维列表?

Dart列表解包拼接方案

Dart内置了扩展操作符(spread operator)...可以直接完成列表解包操作,是官方原生支持的快捷实现方式,不需要额外引入依赖。

适配你的需求的实现方案

你需要每次从seed二维列表随机取出子列表,再将所有子列表的元素拼接为一维int列表,有两种常用实现方式:

1. 扩展操作符搭配列表生成式(最简洁写法)

直接通过列表字面量+扩展操作符完成解包拼接,不需要手动初始化空列表:

import 'dart:math';

List<int> _getOperatorList() {
  const List<List<int>> seed = [
    [0, 1, 2, 3],
    [3, 2, 1, 0],
    [0, 1, 0, 2],
    [1, 3, 1, 0],
    [2, 1, 2, 2],
    [3, 0, 3, 2],
  ];
  final random = Random();
  return [
    // 循环25次,每次随机选中一个子列表解包后插入结果列表
    for (int i = 0; i < 25; i++)
      ...seed[random.nextInt(seed.length)]
  ];
}

2. 循环+addAll实现(可读性更高)

如果习惯写显式循环,直接用addAll方法即可,该方法本身支持直接传入子列表批量添加元素:

import 'dart:math';

List<int> _getOperatorList() {
  const List<List<int>> seed = [
    [0, 1, 2, 3],
    [3, 2, 1, 0],
    [0, 1, 0, 2],
    [1, 3, 1, 0],
    [2, 1, 2, 2],
    [3, 0, 3, 2],
  ];
  Random random = Random();
  List<int> randomInts = [];
  for (int i = 0; i < 25; i++) {
    randomInts.addAll(seed[random.nextInt(seed.length)]);
  }
  return randomInts;
}

扩展场景说明

如果是需要直接把整个二维列表全部打平为一维列表,不需要随机筛选子列表,也可以用内置的expand方法实现:

List<int> flattenSeed = seed.expand((subList) => subList).toList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:42:03