你知道最有效的方法吗?
let toTableau2D (seqinit:seq<'a*'b*'c>) =
let myfst = fun (a,b,c) -> a
let myscd = fun (a,b,c) -> b
let mytrd = fun (a,b,c) -> c
let inputd = seqinit |> groupBy2 myfst myscd肯定有比重写fst更好的方法。
更新后,我重新编写了以前的'a*'b为一个单一的结构,我的代码现在看起来像
let toTableau (seqinit:seq<'a*'b>) =
let inputd = seqinit |> Seq.groupBy fst |> toMap
let keys = seqinit |> Seq.map fst |> Set.ofSeq |> List.ofSeq
...发布于 2012-03-01 15:14:08
你为什么不直接写出来:
let toTableau2D (a, b, c) =
let toto = a
// ...如果以后要引用seqinit,则始终可以重构三元组或使用命名模式:
let toTableau2D ((a, b, c) as seqinit) =
let toto = a
// Do something with seqinit
// ...编辑:
除非使用反射,否则任何类型的元组都不能使用fst函数。在您的示例中,编写一些实用程序函数并重用它们并不会有什么影响:
let fst3 (a, _, _) = a
let snd3 (_, b, _) = b
let thd3 (_, _, c) = c
let toTableau2D (seqinit: seq<'a*'b*'c>) =
let inputd = seqinit |> groupBy2 fst3 snd3
// ...如果要使此操作适用于任意数量的元组元素,请考虑将元组更改为列表,并在列表上使用模式匹配。
发布于 2012-03-01 15:20:11
+1到@pad说的话。否则(如果你只是简化了你想要做的事情,并且被这样定义的seqinit所困),我想你总是可以这样做的:
let toTableau2D (seqinit:'a*'b*'c) =
let toto, _, _ = seqinit
//...https://stackoverflow.com/questions/9518503
复制相似问题