这次我们介绍一些列表初始化跟操作的便捷方式
你可以使用一些特殊的语法来初始化 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]