如何在Dart中将[[1,2],[3,4]]转换为[[1,3],[2,4]]?
Dart 二维列表转置实现:将 [[1,2],[3,4]] 转为 [[1,3],[2,4]]
这个需求本质是矩阵转置——把原二维列表的行和列互换。下面提供两种实用的实现方法:
方法一:手动嵌套遍历(直观易懂)
通过两层循环,依次提取原列表每一列的元素,组成转置后的每一行:
void main() { final original = [[1, 2], [3, 4]]; final rowCount = original.length; final colCount = original[0].length; // 假设所有子列表长度一致 final transposed = <List<int>>[]; for (var col = 0; col < colCount; col++) { final newRow = <int>[]; for (var row = 0; row < rowCount; row++) { newRow.add(original[row][col]); } transposed.add(newRow); } print(transposed); // 输出: [[1, 3], [2, 4]] }
方法二:利用高阶函数(简洁写法)
借助 List.generate 和 map 方法,用更紧凑的代码实现转置:
void main() { final original = [[1, 2], [3, 4]]; final transposed = List.generate( original[0].length, (colIndex) => original.map((row) => row[colIndex]).toList(), ); print(transposed); // 输出: [[1, 3], [2, 4]] }
注意事项
如果原二维列表是不规则的(子列表长度不同),需要先处理边界逻辑,比如取最大列数、补默认值或做异常判断,避免索引越界。
内容的提问来源于stack exchange,提问作者Utopion
相关产品推荐
相关产品推荐

