Chapter3 - List Comprehensions


这次我们介绍一些列表初始化跟操作的便捷方式

你可以使用一些特殊的语法来初始化 list,sequences跟arrays(list我们就知道了,而sequences

则对应 .net 的 IEnumerable 类型, arrays后面的章节会介绍)

 

最简单的初始化一个连续的列表方法是使用 ..,看示例

 


let  numericList = [ 0  ..  9 ]

// numericList是一个从0~9的列表[0;1;2;3....;9]

let  alpherSeq = { ' A '  ..  ' Z ' }

// alpherSql 是一个从A - Z的序列

let  multiplesOfThree = [ 0  ..  3  .. 30 ]

// 返回的是从0开始的所有3的倍数

// [0;3;6;9;.....;27;30]

let  revNumber = [ 9  .. - 1  ..  0 ]

// 返回的是 [9;8;7;6;5;4;3;2;1;0]


 

可见,[x..y..z]中,x为初始值,y为步长,z为结束值

即最后的列表会是 [x; x+y; x+y+y; x+y+y+y ....z] 直到z = x + (? * y)

 

另外一个初始化的方法便是可以使用循环加上条件;


let  squares =
   for  x  in   1  ..  10   ->  x * x]
// 获取1~10的所有数字的平方组成的列表


// let evens n =

//         [for x in 1 .. n when x % 2 = 0 -> x]

// 作者提供的这个已经不适用了。

// 一般推荐使用内置函数

// 下面我给出一个利用了前面介绍的各种知识的集合来实现原作者上面语句的表达式

let  evens =  fun  n  ->  List.filter ( fun  x  ->  x %  2  =  0 ) [ 0 ..n]


像这样调用evens

evens 10

//返回0~10的所有偶数

 

接着还有一种,


 
// let squarePoints n =

//         { for x in 1 .. n

//          for y in 1 .. n -> x,y}

// 同样的,此方法在F# 2.0已经不可再使用了,而应该改为:

let  squarePoints n = [ for  x  in   1  .. n  do

                      
for  y  in   1  .. n  do

                      yield x,y]


转载于:https://www.cnblogs.com/SinSay/archive/2010/09/18/1828871.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值