如果你也会C#,那不妨了解下F#(3):F#集合类型和其他核心类型

*本文链接:http://www.cnblogs.com/hjklin/p/fs-for-cs-dev-3.html *

在第一篇中,我们介绍了一些基础数据类型,其实那篇标题中不应该含有“F#”字眼,因为并不是特有的。

在本篇中,我们介绍如数组这些集合类型以及部分F#特有的类型。

在第一篇里我们列了一个从0加到100的代码段,了解函数式编程的同学会说那个F#代码不正宗。

而现在的C#开发一般也会使用Linq的方式来代替循环,其实F#天生就是使用这种方式的,下面我们先介绍F#的集合类型,在之后会介绍相关集合的函数操作。

集合类型

列表:List

声明List

注意,F#中的List不是C#中常用的System.Collections.Generic.List<T>,虽然后者你也可以在F#里使用。

F#中的List是有序,不可变的,且每一项的类型必须一致。我们先看看怎么定义列表。以下代码以>开头的为输入,之后的一行则为输出结果。

> let charList = ['a';'o';'e';'i';'u';'ü'];;
val charList : char list = ['a'; 'o'; 'e'; 'i'; 'u'; 'ü']
> let emptyList = [];;
val emptyList : 'a list
> let emptyList2 = List.empty;;
val emptyList : 'a list

使用[]声明和List.empty均可声明空列表,空列表类型为'a list表示可接收任意类型,但当你添加一个元素后,列表类型但确定了,无法添加其它类型的元素。

和C#不一样,F#在集合中使用分号(;)分隔各个项。但当列表很大时,使用这样的声明方式就变得很麻烦了。

这时,可以使用下面的范围(Range)声明方式来声明:

> let intList = [1..10];;
val intList : int list = [1; 2; 3; 4; 5; 6; 7; 8; 9; 10]
> let tens = [0 .. 10 .. 100];;
val tens : int list = [0; 10; 20; 30; 40; 50; 60; 70; 80; 90; 100]
> let countDown = [5L .. -1L .. 0L];;
val countDown : int64 list = [5L; 4L; 3L; 2L; 1L; 0L]

范围声明方式中,中间项为间隔(若无则间隔为1),并包含起始项到结束项熟悉Python的小伙伴要注意。

上一篇:HiWord()


下一篇:工作流、业务流程管理和SOA