F#教程:List内包式


F#的List和数组中,有一种被称为内包式的特殊标记方法。使用了这些,list相关的代码就会变得很简洁。我们就试着写如下代码:

let evenarray = [| for x in 0..10 -> x*2 |]
printfn "%A" evenarray

  运行结果是:

  [|0; 2; 4; 6; 8; 10; 12; 14; 16; 18; 20|]

  生成list的代码如下:

let tupleList = [ for x in 0..5 -> x, x * x ]
printfn "%A" tupleList

  这次运行的结果是:

  [(0, 0); (1, 1); (2, 4); (3, 9); (4, 16); (5, 25)]

  如果不使用内包的话,代码可能非得如下这样不可:

let evenarray = Array.create 11 0 
for i in 0..10 do 
    evenarray.[i] <- i * 2

  是不是感觉有点麻烦啊?

  对于list,如果不使用list内包式是不是应该如下这样啊?

let mutable evenlist = [] 
for i in 0..10 do 
    evenlist <- List.append evenlist [(i * 2)]

  不使用mutable的话好像还不行。这里的append有点像C#的静态函数吧?

  有了内包式,就不要写这么麻烦的代码了。

  此外,生成增量递增的数组或list的时候还可以使用“初始值..增量..终止值”的写法:

let a = [| 0..2..20 |]
let b = [100..-10..0]

  使用F#还真的可以写很简洁的代码!

F#的List和数组中,有一种被称为内包式的特殊标记方法。使用了这些,list相关的代码就会变得很简洁。我们就试着写如下代码:

let evenarray = [| for x in 0..10 -> x*2 |]
printfn "%A" evenarray

  运行结果是:

  [|0; 2; 4; 6; 8; 10; 12; 14; 16; 18; 20|]

  生成list的代码如下:

let tupleList = [ for x in 0..5 -> x, x * x ]
printfn "%A" tupleList

  这次运行的结果是:

  [(0, 0); (1, 1); (2, 4); (3, 9); (4, 16); (5, 25)]

  如果不使用内包的话,代码可能非得如下这样不可:

let evenarray = Array.create 11 0 
for i in 0..10 do 
    evenarray.[i] <- i * 2

  是不是感觉有点麻烦啊?

  对于list,如果不使用list内包式是不是应该如下这样啊?

let mutable evenlist = [] 
for i in 0..10 do 
    evenlist <- List.append evenlist [(i * 2)]

  不使用mutable的话好像还不行。这里的append有点像C#的静态函数吧?

  有了内包式,就不要写这么麻烦的代码了。

  此外,生成增量递增的数组或list的时候还可以使用“初始值..增量..终止值”的写法:

let a = [| 0..2..20 |]
let b = [100..-10..0]

  使用F#还真的可以写很简洁的代码!


« 
» 
快速导航

Copyright © 2016 phpStudy | 豫ICP备2021030365号-3