在 Haskell 中,如何将 x 个数字的列表更改为 n 个 n 个数字的列表?
第一个子列表将有第一到第十个数字,第二个列表从第 11 到第 20...
myFunction :: [Int] -> [[Int]]
在 Haskell 中,如何将 x 个数字的列表更改为 n 个 n 个数字的列表?
第一个子列表将有第一到第十个数字,第二个列表从第 11 到第 20...
myFunction :: [Int] -> [[Int]]
有以下chunksOf
功能Data.List.Split
:
chunksOf 2 [0, 1, 2, 3] -- [[0, 1], [2, 3]]
或者,我们已经有了splitAt
in prelude
,chunksOf
可以轻松实现:
chunksOf :: Int -> [a] -> [[a]]
chunksOf n [] = []
chunksOf n xs = let (as, bs) = splitAt n xs in as : chunksOf n bs
使用 take 和 drop 可能更容易阅读,并且不需要库。
chunksOf :: Int -> [a] -> [[a]]
chunksOf _ [] = []
chunksOf n xs = take n xs : chunksOf n (drop n xs)