F#:列表和元组如何获得所需的输出?
F#: List and tuple How can i obtain the desired output?
我想对数据进行分组,使其包含列表,其中第一个元素是某个不同的项目(如键),第二个元素应该是元组列表,其中第一个元素是键。
例如:如果 return 类型 (string * (string list * int)) list
的列表是
[("key1",(["data1";"data2"],1));("key1",(["data3";"data4"],10))]
那么 output 应该是 returning
(string * (string list * int) list) list
[("key1",[(["data1";"data2"],1);(["data3";"data4"],10)])]
let datat= [("a",(["a";"k"],5));("b",(["b";"z"],6));("a",(["a";"y"],7));("c",(["c";"k"],2))];;`
输出应该是
[("a",[(["a";"k"],5);(["a";"y"],7)]);("b",[(["b";"z"],6)]);("c",[(["c";"k"],2)])]
我试过了:
datat |> List.map (fun (a,b) ->a,b );;
我试了很多次都得不到想要的output.I但是我failed.Thank提前求助
我认为您正在尝试按元组的第一项对项目进行分组。
所以你会做datat |> List.groupBy fst
这将为您提供预期的分组。
[("a", [("a", (["a"; "k"], 5)); ("a", (["a"; "y"], 7))]);
("b", [("b", (["b"; "z"], 6))]); ("c", [("c", (["c"; "k"], 2))])]
然后您想要从每个分组条目中清除其先前 header 中的项目。因此,您将使用仅采用元组第二部分的函数进行映射。 List.map (fun (groupKey, groupedItems) -> groupKey, groupedItems |> List.map snd)
所以整行是datat |> List.groupBy fst |> List.map (fun (groupKey, groupedItems) -> groupKey, groupedItems |> List.map snd)
它将 returns
[("a", [(["a"; "k"], 5); (["a"; "y"], 7)]); ("b", [(["b"; "z"], 6)]);
("c", [(["c"; "k"], 2)])]
我想对数据进行分组,使其包含列表,其中第一个元素是某个不同的项目(如键),第二个元素应该是元组列表,其中第一个元素是键。
例如:如果 return 类型 (string * (string list * int)) list
的列表是
[("key1",(["data1";"data2"],1));("key1",(["data3";"data4"],10))]
那么 output 应该是 returning
(string * (string list * int) list) list
[("key1",[(["data1";"data2"],1);(["data3";"data4"],10)])]
let datat= [("a",(["a";"k"],5));("b",(["b";"z"],6));("a",(["a";"y"],7));("c",(["c";"k"],2))];;`
输出应该是
[("a",[(["a";"k"],5);(["a";"y"],7)]);("b",[(["b";"z"],6)]);("c",[(["c";"k"],2)])]
我试过了:
datat |> List.map (fun (a,b) ->a,b );;
我试了很多次都得不到想要的output.I但是我failed.Thank提前求助
我认为您正在尝试按元组的第一项对项目进行分组。
所以你会做datat |> List.groupBy fst
这将为您提供预期的分组。
[("a", [("a", (["a"; "k"], 5)); ("a", (["a"; "y"], 7))]);
("b", [("b", (["b"; "z"], 6))]); ("c", [("c", (["c"; "k"], 2))])]
然后您想要从每个分组条目中清除其先前 header 中的项目。因此,您将使用仅采用元组第二部分的函数进行映射。 List.map (fun (groupKey, groupedItems) -> groupKey, groupedItems |> List.map snd)
所以整行是datat |> List.groupBy fst |> List.map (fun (groupKey, groupedItems) -> groupKey, groupedItems |> List.map snd)
它将 returns
[("a", [(["a"; "k"], 5); (["a"; "y"], 7)]); ("b", [(["b"; "z"], 6)]);
("c", [(["c"; "k"], 2)])]