zoukankan      html  css  js  c++  java
  • 简说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..] 
  • 相关阅读:
    用element-ui搭建后台框架
    给hover加上过渡效果
    vue搭建项目
    单选框的选中事件
    Javascript开发中让代码性能变高的小技巧
    这是一个弹幕
    纯CSS打造进度条
    fixed元素随滚动条无抖动滚动
    python3实现url全编码/解码
    如何入门漏洞挖掘,以及提高自己的挖掘能力(别人写的挺好)
  • 原文地址:https://www.cnblogs.com/greatim/p/3672081.html
Copyright © 2011-2022 走看看