我在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, ..]