2017-03-13 9 views

答えて

3

これを行うための組み込み関数はありません。リストの理解の構文を使用すると、わかりやすくなります。

let a = 
    [| for i in 0..(Array2D.length1 a' - 1) -> 
     [| for j in 0..(Array2D.length2 a' - 1) -> a'.[i,j] |] |] 

注意すべき点は基本インデックスです。あなたの例では、配列はゼロベースなので、コードを短くするためにゼロを使用します。しかし、非ゼロベースの配列の場合をサポートする必要がある場合は、代わりにa'.[ i + Array2D.base1 a', j + Array2D.base2 a' ]を実行する必要があります。エレガントではありませんが、腕時計です。

+2

その、Array2D.length秒-1のカップルを追加し、あなたは正しいです。私はIndexOutOfRangeExceptionを取得します。回答ありがとうございました –

+4

良いキャッチです。申し訳ありませんが、私は電話から書いていましたが、コードを確認できませんでした。 –

1

それはあなたが興味のある配列の建物だ場合、あなたは2 Array.init

などを使用することにより[][](別名ジャグ配列)の形を構築することができます

[|[|0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19|]; [|1; 2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20|]; [|2; 3; 4; 5; 6; 7; 8; 9; 10; 11; 12; 13; 14; 15; 16; 17; 18; 19; 20; 21|];

Array.init 10 (fun r -> Array.init 20 (fun c -> (c+r)))

...ほとんど正解