聚合非规范化数据的惯用法

Run*_* FS 2 f#

我有一组数组数组.举个例子

[[1,3],
 [4,3],
 [1,2],
 [7,2]]
Run Code Online (Sandbox Code Playgroud)

我想把它变成

[(3,[1,4])
 (2,[1,7])]
Run Code Online (Sandbox Code Playgroud)

是:从创建的元组,其中所述第一构件是从原始和阵列的索引1的阵列的索引为0的所有值的原始基于索引1.我可以命令式地解决这一点,但想这样做分组以更多FP的方式

Joh*_*mer 5

使用Seq.groupBy结合几张地图会得到期望的结果

[[1;3];
 [4;3];
 [1;2];
 [7;2]] 
|> Seq.groupBy (fun (a::b) -> b) 
|> Seq.map (fun (a,b) -> a,b|> Seq.toList) 
|> Seq.map (fun (a,b) -> a,b|>List.map (fun (c::d) -> c ))
Run Code Online (Sandbox Code Playgroud)