F# 入门(十二):Tuple(元组)
元组是F#易做图有的一种数据类型,一种非常方便的数据类型,类型为System.Tuple<_>。它是一些值的组合,通过逗号来分隔每个元素,元素可以是任何的数据类型。
元组和链表的区别:
链表:元素的个数是可变的,但元素必须是相同的数据类型。
元组:元素的个数是固定的,元素的类型可以是不同的数据类型。
使用元组的一个好处就是,如果用元组来作为函数的返回值进行返回,就可以很方便地从一个函数中返回多个值。
元组的表示方法:
(元素1,元素2,…,元素n)
下面是一些示例:
> let dinner = ("green eggs", "ham");; //两个字符串组成的元组
val dinner : string * string = ("green eggs", "ham")
> let zeros = (0, 0L, 0I, 0.0);; //各种数字类型组成的元组,分别对应下面的类型
val zeros: int * int64 * System.Numerics.BigInteger * float = (0, 0L, 0, 0.0)
>
元组的数据类型是各元素的数据类型之间用*连结起来所构成的新的数据类型。
元组也可以嵌套元组:
> let nested = (1, (2.0, 3M), (4L, "5", '6'));; //一个元组中嵌套了两个元组
val nested : int * (float * decimal) * (int64 * string * char) =
(1, (2.0, 3M), (4L, "5", '6'))
>
使用元组中的元素的时候,第一个元素叫fst,第二个元素叫snd,使用第三个以上的元素时用模式匹配。
> let nameTuple = ("John", "Smith");;
val nameTuple : string * string = ("John", "Smith")
> fst nameTuple;;
val it :string = "John"
> snd nameTuple;;
val it :string = "Smith"
> let snacks = ("Soda", "Cookies","Candy");; //含有三个以上元素的元组
val snacks : string * string * string = ("Soda", "Cookies","Candy")
> let x, y, z = snacks;; //用多个变量来匹配各个元素的值
val z :string = "Candy"
val y :string = "Cookies"
val x :string = "Soda"
> x;;
val it :string = "Soda"
>
元组作为参数传递给函数,注意跟普通部分函数的区别:
> let add x y = x + y;; //部分函数,顾名思义就是可以拆分的函数
//它可以被拆分使用,提高代码使用率,比如碰到每个操作都有某个相同参数时:
//如计算每个元素加一后的值
//let fun1 = add 1
//let fun2 y = fun1 y
val add :int -> int -> int
> let tupledAdd(x, y) = x + y;;
val tupledAdd : int * int -> int
> add3 7;;
val it :int = 10
>tupledAdd(3, 7);;
val it :int = 10
>
摘自 fsharp_net的专栏
补充:综合编程 , 其他综合 ,