我想在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
模块中使用iter
和iteri
函数。
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