嗨我想知道是否有一种方法可以在列表中迭代每个项目一次,在java中我将使用a来为每个循环访问arraylist中的每个项目,但是我想采用f#的功能方法。我能想到的最好的方法是使用列表头部的第一个项目,然后删除它,这样下一个项目就是头部(然后继续进行,直到列表中没有剩下的值)。唯一的问题是我不知道如何实现它,因为我仍然是这种语言的新手。任何帮助将不胜感激。
为方便起见,假设我有一个列表:
let mylist = ["hello";"bird";"dog";"cat";"snake"]
答案 0 :(得分:3)
如果您只想在常规F#代码中执行此操作,而不是出于教育目的,则最简单的选择是使用for
。这不是特别有用,但由于任务本质上是必不可少的,所以这是要走的路:
for item in mylist do
printfn "%s" item
更具功能性的解决方案是使用更高阶函数List.iter
。这作为较长流水线的一部分很有用,但它说明了一些功能特性,即使用函数作为参数:
mylist |> List.iter (fun item ->
printfn "%s" item)
最后,您还可以使用列表上的递归和模式匹配来完成此操作。这基本上是List.iter
在幕后所做的事情 - 而不是"删除"头部,这将列表分解为头部和尾部,然后在头部打印项目后递归处理尾部:
let rec iter items =
match items with
| [] -> ()
| head::tail ->
printfn "%s" head
iter tail
iter mylist