13

C# と Java では、バイト配列は次のように作成できます。

byte[] b = new byte[x];

ここxで、配列のサイズを示します。私がやりたいことは、F# で同じことをすることです。私はそれを行う方法を検索し、ドキュメントで探しました。方法が分からないので、おそらく間違った検索用語を使用していると思います。

これまでに見つけたのは、Array.create次のように使用できることです。

let b = Array.create x ( new Byte() )

C# および Java で実行できる方法に似た別の方法はありますか?

4

4 に答える 4

17

最も近い F# の類似物はArray.zeroCreate です。

let b: byte [] = Array.zeroCreate x

Java および C# プラットフォームで暗黙的に配列要素を0バイトに初期化する代わりに、F# は配列要素の初期値を明確にします。

F# のtodynamic sizeに関しては、C#/Java と同様に、割り当て時に値bによって一度定義されx、後で を変更して変更することはできません。x

于 2012-06-16T14:01:17.090 に答える
9
let b = Array.create<byte> x 0uy  //Array.zeroCreate<byte> x
于 2012-06-16T18:32:00.123 に答える
7

初期化されていない配列を作成し、後で埋めたいと思うでしょう:

let arr = Array.zeroCreate 10
for i in 0..9 do
   arr.[i] <- byte(i*i)

これは、C#/Java で通常行う方法ですが、F# では一義的です。考えてみてください。一部の要素の初期化を忘れると、null悪夢に対処する必要があります。

ほとんどの場合、上記の手順をArray モジュールまたは配列内包表記の高階関数に置き換えることができます。

let arr = Array.init 10 (fun i -> byte(i*i))

また

let arr = [| for i in 0..9 do -> byte(i*i)|]

この MSDN ページを見てください。F# での配列の使用に関する有用な情報が含まれています。

于 2012-06-16T14:26:43.873 に答える
-1

どう言う意味ですか?

F#の構文はC#Javaとは異なります。モジュールを使用しArrayて、初期化子で配列を作成できるようにします。奇妙なことは何もありません。一方の言語は関数型で、もう一方は命令型であるため、これらの違いは実際に必要です。

F#言語仕様によると、初期化されていないものを宣言することはできません (Option実際には初期化されていない概念を表現できるエクスプロイトである型として特定のパターンを使用しない限り)。配列内の要素。

于 2012-06-16T13:50:48.137 に答える