首页 > 解决方案 > Haskell 按列表索引过滤

问题描述

我有功能:

isEven n = (mod n 2) == 0

我只想要偶数,我得到:

filter isEven [1, 2, 3, 4 ,5 ,6] -- -> 2, 4, 6

到现在为止还挺好。

我的问题是:函数中是否有可以按列表索引过滤的功能?(您可以想象 js 过滤器,其中第二个参数是索引)。

如果没有,是否有任何理由不包括在内,我怎样才能以一种好的haskell方式做到这一点?

标签: haskell

解决方案


如果您想要一个同时过滤值和索引的函数,您可以自己编写如下:

filterIndexed :: (a -> Int -> Bool) -> [a] -> [a]
filterIndexed p xs = [x|(x,i) <- zip xs [0..], p x i]

它使用了一个列表理解,这对这种事情(过滤器和项目)非常有用。这不在标准库中的原因是因为它是一种相对罕见的操作,并且直接在代码中具有列表理解相当容易。


推荐阅读