如何将int[][]转换为List<List<int>>?已尝试两种方法均失败
将int[][]转换为List<List>的可行方法
完全可以实现这种转换,先说说你之前两种写法失败的原因:
- 第一种写法
new List<List<int>>(ArrayName)失败:List<List<int>>的构造函数需要接收IEnumerable<List<int>>类型的参数,但int[][]本质是IEnumerable<int[]>,数组里的元素是int[]而非List<int>,类型不匹配,所以没法直接构造。 - 第二种LINQ写法
ArrayName.OfType<List<int>>().ToList()失败:OfType<List<int>>()只会保留集合中属于List<int>类型的元素,但int[][]里的元素都是int[]数组,没有符合条件的元素,最后得到的是空列表。
下面是两种可行的转换方法:
方法一:使用LINQ快速转换
通过Select遍历原二维数组的每个一维数组,将每个int[]转成List<int>,再整体转成目标列表:
// 示例原数组,包含空数组 int[][] arrayName = new int[][] { new int[] {1, 2}, new int[0], new int[] {3} }; List<List<int>> listName = arrayName.Select(arr => arr.ToList()).ToList();
这种方法能自动处理空数组,空的int[]会被转成空的List<int>。
方法二:循环手动转换
如果不想依赖LINQ,可以用循环逐个处理:
int[][] arrayName = new int[][] { new int[] {1, 2}, new int[0], new int[] {3} }; List<List<int>> listName = new List<List<int>>(); foreach (int[] arr in arrayName) { listName.Add(arr.ToList()); }
遍历原数组的每个一维数组,转成List<int>后添加到目标列表中,同样支持空数组的转换。
内容的提问来源于stack exchange,提问作者Umicron
相关产品推荐
相关产品推荐

