f# - 聚合非规范化数据的惯用方式

标签 f#

我有一组数组的数据。举个例子

[[1,3],
 [4,3],
 [1,2],
 [7,2]]

我想将其转换为

[(3,[1,4])
 (2,[1,7])]

即:创建一个元组数组,其中第一个成员来自原始索引 1,该数组是原始索引 0 中基于索引 1 分组的所有索引值。我可以强制解决这个问题,但我想以更 FP 的方式来做

最佳答案

使用 Seq.groupBy 结合一些 map 将得到想要的结果

[[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 ))

关于f# - 聚合非规范化数据的惯用方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15292425/

相关文章:

f# - 将字符串转换为流

c# - DllImport - C 类型到 .NET 类型

razor - ServiceStack.Razor + F#

f# - WebSharper:不透明类型,具有 `===` 的相等性检查

f# - 这个序列表达式应该是尾递归的吗?

f# - 可选参数类型不匹配

xamarin - ZXingBarcodeImageView(QR 代码)在 iOS 上显示,但在 Android 上不显示(Xamarin.Forms)

f# - 在 F# 中将列表分组为列表列表

f# - 用组合得到偶数

f# - 在 Windows 8 上的 Xamarin Studio 中构建简单的 F# 项目时出现问题