【问题标题】:Splitting list into n-tuples [duplicate]将列表拆分为n元组[重复]
【发布时间】:2011-04-28 13:48:09
【问题描述】:

如何将列表拆分为指定长度的元组列表/列表? splitBy :: Int -> [a] -> [[a]]

splitBy 2 "asdfgh" 应该返回 ["as", "df", "gh"]

【问题讨论】:

  • 吹毛求疵:拆分为 n 元组(其中 n 对于函数而言不是常数)是不可能的,而且您也不需要这样做 - 您需要长度为 n 的子列表。跨度>
  • takeWhile (not.null) . unfoldr (Just . splitAt n).

标签: haskell


【解决方案1】:

splitEvery 通常会得到这份工作的认可。

【讨论】:

  • 这个模块Data.List.Split一定是新的吧?我的系统上没有,Hoogle 上也没有……
  • 版本 0.1 根据 hackage 于 2008 年 12 月 21 日星期日 19:02:04 UTC 上传。我不认为 Hoogle 索引了很多黑客攻击,但是 Hayoo!找到它。
  • splitEvery 现在称为 chunksOf
【解决方案2】:

Hoogle 中搜索Int -> [a] -> [[a]] 会得到chunksOf,这可能有用。

【讨论】:

    【解决方案3】:

    一种方法:

    splitBy :: Int -> [a] -> [[a]]
    splitBy _ [] = []
    splitBy n xs = take n xs : splitBy n (drop n xs)
    

    另一种方法:

    splitBy' :: Int -> [a] -> [[a]]
    splitBy' _ [] = []
    splitBy' n xs = fst split : splitBy' n (snd split)
                    where split = splitAt n xs
    

    【讨论】:

    • ([x] ++)(x :),函数应用优先级最高,所以最后一行可以写成splitBy n xs = take n xs : splitBy n (drop n xs)
    • @delnan:谢谢!这表明我正在学习 Haskell ...但是您的 cmets 帮助了我:)
    猜你喜欢
    • 2010-12-10
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    • 2019-10-20
    • 2017-07-30
    相关资源
    最近更新 更多