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..] 
  • 相关阅读:
    ueditor单独调用图片上传
    百度Ueditor多图片上传控件
    linux基础之vim编辑器
    linux基础之进阶命令二
    linux基础之基础命令一
    Python基础之PyCharm快捷键大全
    IT菜鸟之VTP应用项目
    IT菜鸟之总结(Du teacher)
    IT菜鸟之DHCP
    IT菜鸟之路由器基础配置(静态、动态、默认路由)
  • 原文地址:https://www.cnblogs.com/greatim/p/3672081.html
Copyright © 2011-2022 走看看