2011-04-02 42 views
3

我可以在F#中定義一個簡單的列表如下,並遍歷它用下面的代碼:在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] 

我怎麼能遍歷這個 - 下面的代碼得到一個錯誤:

'Unexpected infix operator in lambda expression'

我在這裏要做的是迭代外部序列和管道,轉發到secon d迭代器,然後讓我訪問內部數組的內容。

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

缺少什麼我在這裏 - 我懷疑有語法問題,或者(更嚴重的/可能)缺乏F#/ FP理解的。

回答

5

你不使用你的變量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

試試這個。

nested_array |> Seq.iter(有趣X - > X |> Seq.iter(printfn 「%d」))

3

我一般不喜歡用Seq.iter功能時它不在更大的處理管道中。另一種方法是隻使用嵌套for

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

雖然,這是事實,使用部分功能的應用程序(如張貼KVB)nakes它相當不錯,所以這只是一個個人喜好的事 - 你指望誰閱讀它。我想我的做法是不讓源代碼「更聰明」,如果它沒有給你任何明確的價值。