我是靠谱客的博主 震动墨镜,最近开发中收集的这篇文章主要介绍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

最后

以上就是震动墨镜为你收集整理的Chapter3 - 列表 - List的全部内容,希望文章能够帮你解决Chapter3 - 列表 - List所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部