迭代F#中的嵌套序列 - 如何?

时间:2011-04-02 03:28:46

标签: f# nested iteration sequence

我可以在F#中定义一个简单的列表,如下所示,并使用以下代码对其进行迭代:

let ar = [0;1;2;3]
ar |> Seq.iter (fun x -> printfn "Ar: %A" x)

现在考虑如下嵌套序列:

let ar1 = [1;2;3;4]
let ar2 = [5;6;7;8]
let nested_array = [ar1; ar2]

如何对此进行迭代 - 以下代码会出错:

  

'lambda表达式中的意外中缀运算符'

我在这里要做的是迭代外部序列并将其转发到第二个迭代器,然后让我访问内部数组的内容。

nested_array |>
Seq.iter (fun x -> |> 
                    Seq.iter  (fun y ->
                    printfn "Ar: %A" y))

我在这里缺少什么 - 我怀疑语法问题或(更严重/可能)缺乏F#/ FP理解。

3 个答案:

答案 0 :(得分:6)

您没有使用变量x。尝试

nested_array |> Seq.iter (fun x -> x |> Seq.iter (fun y -> printfn "Ar: %A" y))

或(完全不使用x

nested_array |> Seq.iter (Seq.iter (fun y -> printfn "Ar: %A" y))

或甚至(也取消y

nested_array |> Seq.iter (Seq.iter (printfn "Ar: %A"))

答案 1 :(得分:3)

我不喜欢使用Seq.iter函数,因为它不在较大的处理管道中。另一种方法是使用嵌套的for

for nested in nested_array do
  for y in nested do printfn "Ar: %A" y

尽管如此,使用部分功能应用程序(由kvb发布)确实很好,所以这只是个人偏好的问题 - 以及您希望阅读它的人。我想我的方法不是让源代码“更聪明”,如果它没有给你任何明确的价值。

答案 2 :(得分:1)

试试这个。

nested_array |> Seq.iter(有趣的x - > x |> Seq.iter(printfn“%d”))