我是函数式编程和F#
的新手我试图将元组列表转换为并行列表,例如
let results = [("foo",3);("bar", 4)};("bazz", 8)]
// do something to convert it
// output = ["foo";"bar";"bazz"], output2 = [3;4;8]
我试图做的是
let issue = []
let count = []
for tpl in results do
fst tpl |> issue
snd tpl |> count
但显然这不会编译。
我从声明中获取元组列表
let results = IssueData |> Seq.countBy id |> Seq.toList
我将如何做到这一点?
答案 0 :(得分:3)
第一部分:有List.unzip
:
> let results = [("foo",3);("bar", 4);("bazz", 8)];;
val results : (string * int) list = [("foo", 3); ("bar", 4); ("bazz", 8)]
> let (issue, count) = List.unzip results;;
val issue : string list = ["foo"; "bar"; "bazz"]
val count : int list = [3; 4; 8]
如果我说得对,这就是你想要知道的所以你可以写
let (issues, count)= IssueData |> Seq.countBy id |> Seq.toList |> List.unzip
。
Seq.toList
,因为仍然没有Seq.unzip
;)(它是少数没有被标准化的东西之一所有List / Array / Seq)List.unzip
是一项很好的练习(提示:一如既往有两种情况:[]
和(a,b):rest
)