【发布时间】:2014-10-17 23:54:25
【问题描述】:
我有一个 string[] 列表,我希望将所有列表的字符串数组中的第 5 个元素分组..
我发现了两种不同的方法
let rec Publication x y (z:string [] list) =
if x < z.Length then
let muro = [z.[x].[y]]
let rest = Publication (x+1) y z
List.append muro rest
else []
其中 z 是 string[] 列表,y 是我希望列出的元素。 和
let Publication x (z:string [] list) = [for i in 0 .. (z.Length-1) -> z.[i].[x]]
在第一种情况下,我在处理大量数据时遇到堆栈溢出错误,而第二种情况需要很长时间。谁能帮我找到第三种更有效的方法?谢谢!
【问题讨论】:
-
您可以将第一个转换为尾递归(从而防止堆栈使用),如果您关心它的顺序相同,只需反转结果。
-
我该怎么做?我从来不理解尾递归:(
-
一旦你这样做了,一个全新的世界将为你打开:) 理解这一点很重要,所以试着这样做。不幸的是,我对 F# 的了解不足以给你一个答案,但是对于许多其他语言也是如此,比如 Scheme。
标签: string list recursion f# stack-overflow