C#实现未知层级嵌套List<double[]>的扁平化方法
通用嵌套List<double[]>扁平化实现
要处理任意层级的嵌套List结构,核心思路是递归遍历+类型判断,通过统一的入口参数类型兼容所有嵌套层级,再逐层拆解直到找到目标double[]元素。
实现代码
public static List<double[]> FlattenNestedList(object dataSource) { var result = new List<double[]>(); // 处理最基础的情况:直接传入double[] if (dataSource is double[] array) { result.Add(array); return result; } // 处理可枚举类型(包含所有层级的List) if (dataSource is IEnumerable enumerable) { foreach (var item in enumerable) { // 递归处理每个子元素,合并结果 result.AddRange(FlattenNestedList(item)); } } // 可选:处理非预期输入的情况 else { throw new ArgumentException("数据源包含非预期类型,仅支持嵌套List<double[]>结构"); } return result; }
使用示例
不管数据源是多少层嵌套,直接按需求调用即可:
// 示例:三层嵌套的测试数据 var nestedData = new List<List<List<double[]>>> { new List<List<double[]>> { new List<double[]> { new double[] {1,2}, new double[] {3,4} }, new List<double[]> { new double[] {5,6} } } }; List<double[]> flattenData = FlattenNestedList(nestedData);
核心逻辑说明
- 参数类型设计:用
object作为输入参数,兼容所有层级的嵌套List(所有List都是object的子类); - 递归拆解:
- 优先判断当前对象是否为目标类型
double[],是则直接加入结果集; - 若为
IEnumerable(所有List都实现该接口),则遍历每个子元素并递归调用自身处理; - 最终合并所有递归返回的结果,得到扁平化列表;
- 优先判断当前对象是否为目标类型
- 兼容性:无论嵌套层级是1层、2层还是N层,只要结构是嵌套List+最终
double[],都能正确处理。
内容的提问来源于stack exchange,提问作者sdrest
相关产品推荐
相关产品推荐

