F#技术问询:如何将交错数组转换为二维数组
实现交错数组转二维数组的
toArray2D函数 当然有对应的转换函数啦!既然已经有了把Array2D转成交错数组的toJagged,反过来实现toArray2D其实非常直观——只要满足你说的交错数组每行元素数量一致这个前提就行。
这里是核心实现代码:
let toArray2D<'a> (jagged: 'a [][]) : 'a[,] = if jagged.Length = 0 then Array2D.zeroCreate 0 0 else let rows = jagged.Length let cols = jagged.[0].Length let arr = Array2D.zeroCreate rows cols for i in 0 .. rows - 1 do for j in 0 .. cols - 1 do arr.[i, j] <- jagged.[i].[j] arr
简单拆解一下逻辑:
- 先处理空数组的边界情况,避免后续取第一行长度时出现报错
- 获取交错数组的总行数(
jagged.Length)和每行的列数(取第一行的长度,完全依赖你提到的“每行元素数量一致”的前提) - 创建对应尺寸的二维空数组
- 通过嵌套循环把交错数组里的元素逐个复制到二维数组中
如果想要让函数更健壮(比如提前验证所有行的长度是否统一),可以加个校验逻辑,比如:
let toArray2D<'a> (jagged: 'a [][]) : 'a[,] = if jagged.Length = 0 then Array2D.zeroCreate 0 0 else let cols = jagged.[0].Length if jagged |> Array.exists (fun row -> row.Length <> cols) then invalidArg "jagged" "所有行的元素数量必须一致" let rows = jagged.Length let arr = Array2D.zeroCreate rows cols for i in 0 .. rows - 1 do for j in 0 .. cols - 1 do arr.[i, j] <- jagged.[i].[j] arr
这样如果有行长度不一致的情况,会直接抛出明确的错误信息,方便调试排查问题。
内容的提问来源于stack exchange,提问作者matekus
相关产品推荐
相关产品推荐

