在f#中循环遍历2d数组



我想在f#中循环遍历一个2D数组。类型'obj'不是其值可以用此语法枚举的类型,即不兼容seq <<em>>, IEnumerable<</em>>或IEnumerable,且没有GetEnumerator方法">

我是这样做的

//creates a 3x3 array with values 0   
let g = Array2D.create<int> 3 3 0
for i in g do
for j in i do
printf "%dt" j
printfn "n"
printfn "n"

你可以这样做:

for r = 0 to Array2D.length1 g - 1 do
for c = 0 to Array2D.length2 g - 1 do
printfn "%A " g[r, c]

你已经定义了一个2D数组,但是你正在迭代它,好像它是一个锯齿数组(即数组的数组)。如果你想要一个2D数组,使用另一个答案中的迭代代码,但如果你想使用锯齿数组,这样做:

//creates a 3x3 jagged array with values 0   
let g =
Array.init 3 (fun _ ->
Array.zeroCreate 3)
for i in g do
for j in i do
printf "%dt" j
printfn "n"
printfn "n"

输出是:

0   
0   
0   
0   
0   
0   
0   
0   
0   

可以在Array2D模块中使用iteriteri函数。

g |> Array2D.iter (fun x -> printfn "%d" x)
0
0
0
0
0
0
0
0
0

注意iteri提供了两个索引。

g |> Array2D.iteri (fun i j x -> printfn "[%d,%d] = %d" i j x)
[0,0] = 0
[0,1] = 0
[0,2] = 0
[1,0] = 0
[1,1] = 0
[1,2] = 0
[2,0] = 0
[2,1] = 0
[2,2] = 0

最新更新