在Haskell中对特定值的连续元素进行分组

时间:2018-02-27 13:08:37

标签: haskell

我在haskell中有一个数字列表,我想执行以下转换:

  • 当元素不等于1时,只需在新列表中附加此元素
  • 当元素等于1时,附加到列表包含所有连续1的子列表,然后继续下一个不等于1的字符

为了明确要求我发布示例

Input: [1,2,3,1,1,1,2,3,4,2,1]

Expected Output: [[1] , 2 , 3 , [1,1,1] , 2 , 3 , 4 , 2 , [1]]

重要提示:不等于1的元素不会添加到子列表

我找到了一些可行的解决方法,但我需要找到一个不会多次遍历列表元素的优雅解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

您需要group功能

SELECT [Date] 
FROM [dbo].[my_table]
WHERE [Date] = '';

请注意,每个项目都是一个列表,因为列表中的值应该具有相同的类型。这就是为什么你的例子>> import Data.List >> group [1,2,3,1,1,1,2,3,4,2,1] >> [[1],[2],[3],[1,1,1],[2],[3],[4],[2],[1]] 在Haskell中是不可能的

如果您想要组成 1s 组,其余的则可以使用groupBy

[[1], 2, ..]