如何在haskell中将列表分组为相等长度的较小列表(除了最后一个子列表)?
例如
sublist 3 [1,2,3,4,5,6,7,8] -> [[1,2,3],[4,5,6],[7,8]]
sublist 2 [4,1,6,1,7,3,5,3] -> [[4,1],[6,1],[7,3],[5,3]]
Run Code Online (Sandbox Code Playgroud)
Chr*_*ris 23
尝试:
import Data.List.Split
> splitEvery 2 [4,1,6,1,7,3,5,3]
[[4,1],[6,1],[7,3],[5,3]]
Run Code Online (Sandbox Code Playgroud)
如果你想坚持前奏,你可以使用它splitAt.
splitEvery _ [] = []
splitEvery n list = first : (splitEvery n rest)
where
(first,rest) = splitAt n list
Run Code Online (Sandbox Code Playgroud)
该Data.List.Split模块具有以下chunksOf功能:
Prelude> import Data.List.Split
Prelude Data.List.Split> chunksOf 3 [1,2,3,4,5,6,7,8,9,10]
[[1,2,3],[4,5,6],[7,8,9],[10]]
Prelude Data.List.Split> chunksOf 3 []
[]
Run Code Online (Sandbox Code Playgroud)
它似乎默认安装在我的机器上,但您可能需要使用cabal.
我喜欢的另一个解决方案是:
splitEvery :: Int -> [a] -> [[a]]
splitEvery n = takeWhile (not.null) . map (take n) . iterate (drop n)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10920 次 |
| 最近记录: |