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
相关产品推荐
相关产品推荐

