如何将一维List<Numbers>数组改为[39,Enumerable.Range]二维数组?
实现二维数组
List<Numbers>[,]的两种方式 方法一:嵌套for循环初始化
直接创建指定维度的二维数组,遍历每个索引位置初始化List<Numbers>实例:
// 定义二维数组的维度 int rows = 39; int cols = 4500000; // 对应原代码中Enumerable.Range(1, 4500000)的元素数量 // 创建二维数组容器 List<Numbers>[,] numbers = new List<Numbers>[rows, cols]; // 逐个位置初始化空List for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { numbers[i, j] = new List<Numbers>(); } }
方法二:结合LINQ批量初始化
如果偏好LINQ风格的写法,可以先生成一维集合再转换为二维数组,需要配合一个扩展方法:
int rows = 39; int cols = 4500000; // 生成所有空List的一维集合,再转成二维数组 List<Numbers>[,] numbers = Enumerable.Range(0, rows) .SelectMany(_ => Enumerable.Range(0, cols).Select(__ => new List<Numbers>())) .Cast<List<Numbers>>() .ToArray() .To2DArray(rows, cols); // 扩展方法:将一维数组转为指定维度的二维数组 public static T[,] To2DArray<T>(this T[] source, int rows, int cols) { T[,] result = new T[rows, cols]; int index = 0; for (int i = 0; i < rows; i++) { for (int j = 0; j < cols; j++) { result[i, j] = source[index++]; } } return result; }
注意事项
- 若项目不允许新增扩展方法,优先用第一种嵌套循环方式,逻辑更直接且无额外依赖。
- 4500000列会创建大量
List<Numbers>实例,需注意内存占用,避免引发内存溢出。
内容的提问来源于stack exchange,提问作者Josh
相关产品推荐
相关产品推荐

