Добро пожаловать в 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