Chapter3 - 列表 - List


F#的列表是一种简单的内置集合类型。F#的列表可以是一个空的列表([]),或者是一些值的集合

你可以用 :: 来连接许多的项

 


let  emptyList = []

let  oneItem =  " one "  :: []

let  twoItem =  " one "  ::  " two "  :: []


 

你也可以在初始化列表的时候使用;来分隔列表里的项

 

let  shortHand = [ " apples "  ;  " pairs " ]


 

F#还提供了 @ ,你可以用这个操作符来连接两个列表

 

let  twoLists = [ " one "  ;  " two " ] @ [ " buckle "  ;  " my "  ;  " shoe " ]


 

在同一个列表里的项都必须是同一个类型的,如果你想在里面塞一些不一样的东西进去的华。

编译器将会报出一个错误。当然,你可以强制的使用 box 关键字将列表的类型都处理为object,

但这样就少不了一些装箱、拆箱的消耗。

 

let  objList = [box  1 ; box  2.0 ; box  " three " ]


 

当你在 F# Interactive 中输入上面这行代码的时候会返回:

val objList : obj list = [1; 2.0; "three"]

//很明显的,这里就是一个obj 的 list

 

在F#里面,列表是不可改变的(immutable),也就是说,一旦这个列表给创建了,他就不能

在接受更改,之前提到的函数跟操作符,事实上并没有对其做任何修改,他只是创建了一个新的列表出来

 


let  one = [ " one  " ]

// one为 ["one"]

let  two =  " two  "  :: one

// two为 ["two","one"]

let  three =  " three "  : two

//three为 [
" three " , " two " , " one " ]

let  rightWayRound = List.rev three

//  ["one","two","three"]


 

以上的操作并没有对每个列表做修改,他只是复制了一份,然后又生成了一份新的列表

 

递归是最普通的使用列表的方式。如以下的代码,链接多个列表

 


let  listOfList = [[ 2 ; 3 ; 5 ]; [ 7 ; 11 ; 13 ]; [ 17 ; 19 ; 23 ; 29 ]]

let   rec  concatList l =

   if  List.nonempty l  then
     let  head = List.hd l  in   // 让head等于列表中的第一个元素
     let  tail = List.tl l  in   // 让tail等于列表中的剩余元素
     head @ (concatList tail)  // head 跟 concatList的下一个返回结果链接
   else
     []  // 如果传递进来的是空列表,则返回空列表

concatList listOfList

// 结果 [2;3;5;7;11;13;17;19;23;29]


转载于:https://www.cnblogs.com/SinSay/archive/2010/09/17/1828869.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值