简说F#的数组

如是我闻,MSDN 里面记载:

F#数组的创建方法大概分三类:

1、把初始值包含在[| 和 |]之内,

    let array1 = [| 1; 2; 3 |]
或者
    let array1 = [| 
                            1
                            2
                            3
                  |]


2、使用Array.zeroCreate或者Array.Create,和Array.init

     如果要创建一个所有元素都初始化为零的数组,可以使用 Array.zeroCreate,

        
let arrayOfTenZeroes : byte array = Array.zeroCreate 10  
     这里就是创建长度为10,初始值为0的字节数组,如果不指定为byte array,则默认为int array     

     也可以使用
Array.Create
        
let arrayOfTenZeroes = Array.Create 10 0uy
    
Array.Create函数强大而便捷,第一个参数指定了数组的长度,而第二个参数就指定了数组的类型和初始值。
    在这里
0uy表示初始值为0,其中uy为字节类型的后缀,F#编译器就可以辨认出它为字节数组。 
 
  Array.init相对灵活一点,也复杂一点,下面函数是初始值为0到4平方的数组:
        
let array = Array.init 5 (fun i->i * i) 
    如上面的arrayOfTenZeroes,则可以写成:
       
let arrayOfTenZeroes Array.init 10 (fun _->0) 

3、一种销魂的写法,使用序列表达式:
      
let array3 = [| for in 1 .. 10 -> i * i |]
    这里数组被初始化为1到10的平方。这种写法适合复杂的初始化,再看看这例子:
      let aseq = 
            seq
                yield! System.Text.Encoding.Default.GetBytes("XXXCID") 
                yield 1uy
                for i = 0 to 512 do
                    yield 0uy
                }
      let data = [| for in aseq -> i |]
    这里aseq序列在data赋值时候才执行计算,性能得到保障,而数组直接初始化,没有出现重复赋值的情况。


F#的
函数库里包含了对数组的很多操作,包括Linq,还有排序等。详情可以查阅MSDN。值得一提的是,F#内置有切片的功能,很实用:
    // 返回数组的0到2。
     
array1.[0..2] 
    // 返回数组,从开始到2。
     
array1.[..2] 
    // 返回数组,从2到最后。
     
array1.[2..] 
原文地址:https://www.cnblogs.com/greatim/p/3672081.html