说我有一个Frame
,如下所示,
" Name ID Amount
0 -> Joe 51 50
1 -> Tomas 52 100
2 -> Eve 65 20
3 -> Suzanne 67 10
4 -> Suassss 69 10
5 -> Suzanne 70 10
6 -> Suzanne 78 1
7 -> Suzanne 79 10
8 -> Suzanne 80 12
9 -> Suzanne 85 10
10 -> Suzanne 87 10
...
我想要实现的是在ID
列上对基础进行分组或聚合,以便在遇到运行编号的序列时,应将这些行组合在一起,否则,行本身就是一个组。
答案 0 :(得分:3)
我相信递归函数是你的朋友。
提供元组列表
let data = [(Joe, 51, 50);
(Tomas, 52, 100);
(Eve, 65, 20);
(Suzanne, 67, 10)]
到函数
let groupBySequencialId list =
let rec group result acc data lastId =
match data with
| [] -> acc :: result
| (name, id, amount) :: tail ->
if lastId + 1 = id then
group result ((name, id, amount) :: acc) tail id
else
group (acc :: result) ([(name, id, amount)]) tail id
group [] [] data 0
这应该可以完成工作,除了三个警告。
另请注意,这是一项高度专业化的功能。 如果我是你,如果你打算重复使用它,我会试着让它更通用。
玩得开心。