概述
F#的列表是一种简单的内置集合类型。F#的列表可以是一个空的列表([]),或者是一些值的集合
你可以用 :: 来连接许多的项
let
emptyList = []
let oneItem = " one " :: []
let twoItem = " one " :: " two " :: []
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"]
// 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]
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复