如何将一个列表按偶数和奇数位置分成两个列表?

ocu*_*upe 4 list elm

我想按位置将元素的arbirtray列表拆分为包含所有偶数和奇数元素的两个新列表。

示例:带有这样的列表:

["a", "b", "c", "d", "e"]
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到两个这样的清单:

(["a", "c", "e"], ["b", "d"])
Run Code Online (Sandbox Code Playgroud)

gle*_*nsl 7

单遍和更少的代码:

evensAndOdds : List a -> (List a, List a)
evensAndOdds =
  List.foldr (\item (a, b) -> (item :: b, a)) ([], [])
Run Code Online (Sandbox Code Playgroud)

这里的技巧是在每次迭代中切换返回的元组的元素的位置,从而交替添加一个元组,而不必跟踪索引。

  • 当我检查时,我看上去并没有退缩 (2认同)