当前位置:编程学习 > 网站相关 >>

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的专栏
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,