You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:45:01