arrays - F# : iterate through int array

标签 arrays algorithm f#

我想遍历一个数组,每个元素都有三个整数。 是否可以遍历此数组中的每个整数? 下面的代码不起作用,因为它给出了以下错误:

“'int * int * int'类型与'seq<'a>'类型不兼容”

module Practice2

    let dataSet = 
        [|10, 20, 10; -20, -30, 10; 30, 50, 0;|]
        |> Seq.mapi (fun i elem -> 
            elem
            |> Seq.map (fun a -> printf("TEST"))
            );

我是 F# 的新手,所以如果这是完全错误的方法,请纠正我。

最佳答案

欢迎使用 F#。您的数据是一个三元组数组。当您计算此表达式时,F# 说的也是如此:

[|10, 20, 10; -20, -30, 10; 30, 50, 0|]
// val it : (int * int * int) [] = [|(10, 20, 10); (-20, -30, 10); (30, 50, 0)|]

当然你可以用一个索引来迭代这个数组。通常,使用与您使用的数据结构相关的模块中的函数,此处为 Array

[|10, 20, 10; -20, -30, 10; 30, 50, 0|]
|> Array.iteri (printfn "%i: %A")
// 0: (10, 20, 10)
// 1: (-20, -30, 10)
// 2: (30, 50, 0)

现在,对于真正的数组数组,您可以轻松定义自己的函数。我们将构建一个迭代此数组数组的函数。因此,两个索引 ij,用于外部和内部数组。

module Array =
    let iteri2 f = Array.iteri (fun i -> Array.iteri (f i))
    // val iteri2 : f:(int -> int -> 'a -> unit) -> ('a [] [] -> unit)
[|[|10; 20; 10|];[|-20; -30; 10|];[|30; 50; 0|]|]
|> Array.iteri2 (printfn "%i, %i: %i")
// 0, 0: 10
// 0, 1: 20
// 0, 2: 10
// 1, 0: -20
// 1, 1: -30
// 1, 2: 10
// 2, 0: 30
// 2, 1: 50
// 2, 2: 0

关于arrays - F# : iterate through int array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60852617/

相关文章:

javascript - 按首字母从数组中查找和删除元素

php - 如何在 PHP 中更新 Json 对象中的项目

R - 速度优化和国际象棋排名

algorithm - 删除图中的节点可以形成的树数

python-3.x - 在二进制搜索中,为什么我的循环是无限的?

.net - 从 Python 到 F# 的字符串替换实用程序转换

Javascript动态字符串数组

javascript - 使用 Javascript map() 函数返回 JSON 对象的子集

f# - 为什么 %A 文本格式不适用于 F# 中的内部模块?

wcf - F# wsdl 类型提供程序错误?