为什么Array2D没有折叠操作?

Bit*_*ler 3 f#

我刚刚讨论了一个在Array2D上使用fold/foldi方法很有用的情况,我想知道,如果有原因,为什么Array2D没有它们.

由于我的array2d非常庞大,我不想先将它转换为其他格式.

它只是一个罕见的用例,还是有技术原因,为什么没有添加这些方法?或者有没有办法实现相同而不触及数组中的数据(如移动它)?

Tom*_*cek 5

我认为在标准Array2D模块中使用此功能非常有用.您可以为Visual F#存储库打开一个问题并帮助我们添加它:-).

除了@scrwtp编写的内容之外,您还可以使用更直接的可变实现.对于像这样的基本功能,我认为使用变异是好的,它会更快一点:

let foldi (folder: int -> int -> 'S -> 'T -> 'S) (state: 'S) (array: 'T[,]) =
    let mutable state = state
    for x in 0 .. Array2D.length1 array - 1 do
        for y in 0 .. Array2D.length2 array - 1 do
            state <- folder x y state (array.[x, y])
    state
Run Code Online (Sandbox Code Playgroud)