Create a byte array with dynamic size in F#

前端 未结 4 1843
被撕碎了的回忆
被撕碎了的回忆 2021-02-20 07:16

In C# and Java a byte array can be created like this

byte[] b = new byte[x];

where x denotes the size of the array. What I want to

相关标签:
4条回答
  • 2021-02-20 07:26
    let b = Array.create<byte> x 0uy  //Array.zeroCreate<byte> x
    
    0 讨论(0)
  • 2021-02-20 07:27

    What do you mean?

    F# has a syntax different from C# and Java, you are using the Array module to let him create an array with an initializer. Nothing strange, one language is functional while the other is imperative so these differences are indeed needed.

    According to the F# language specs you can't declare something that is uninitialized (unless using specific patterns as the Option type which are just exploits that allow you to express the uninitialized concept without really having it), that's why you have to pass an initializer for elements in the array.

    0 讨论(0)
  • 2021-02-20 07:37

    I think you would want to create an uninitialized array and fill it later:

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

    It's the way you normally do in C#/Java, which is unidiomatic in F#. Think about it; if you forget to initialize some elements, you have to deal with null nightmares.

    In almost all cases, you can always replace the above procedure by high-order functions from Array module or array comprehension:

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

    or

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

    Take a look at this MSDN page; it contains useful information about using Array in F#.

    0 讨论(0)
  • 2021-02-20 07:42

    A closest F# analog would be Array.zeroCreate:

    let b: byte [] = Array.zeroCreate x
    

    Instead of implicit array elements initialization to 0 bytes on Java and C# platforms F# makes the initial value of array elements obvious.

    As to dynamic size of b in F# it is defined once by x value at the allocation and cannot be changed later by changing x, similarly to C#/Java,.

    0 讨论(0)
提交回复
热议问题