我想遍历一个数组,每个元素都有三个整数。 是否可以遍历此数组中的每个整数? 下面的代码不起作用,因为它给出了以下错误:
“'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)
现在,对于真正的数组数组,您可以轻松定义自己的函数。我们将构建一个迭代此数组数组的函数。因此,两个索引 i
和 j
,用于外部和内部数组。
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/