我有一个foo: seq<int*int>
我想拆分元组项目,然后将结果存储到两个变量,每个变量为seq<int>
我想知道是否有更漂亮的方法来做到这一点,例如
let item1, item2 = foo |> ?????
我当前的解决方案:
let item1 = foo |> Seq.map(fun (f1,_) -> f1)
let item2 = foo |> Seq.map(fun (_,f2) -> f2)
最佳答案
遗憾的是,尽管确实存在与Lists(Seq.unzip
)和Arrays(List.unzip
)等效的语言,但该语言中没有内置的Array.unzip
函数。
定义这种功能的方法有几种,一种方法是:
let unzip sequence =
let (lstA, lstB) =
Seq.foldBack (fun (a,b) (accA, accB) ->
a::accA, b::accB) sequence ([],[])
(Seq.ofList lstA, Seq.ofList lstB)
另外,如果您不希望在列表之间来回切换,则可以执行以下操作:
let item1, item2 =
let it1, it2 =
foo
|> List.ofSeq
|> List.unzip
(Seq.ofList it1, Seq.ofList it2)
关于f# - 如何做Seq.unzip,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37034919/