Haskell按列表索引过滤

时间:2018-10-08 04:38:38

标签: haskell

我有功能:

isEven n = (mod n 2) == 0

我只想要偶数,我得到:

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

到目前为止很好。

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

如果没有原因,为什么不包括在内?如何以一种好的haskell方式来做到这一点?

1 个答案:

答案 0 :(得分:1)

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

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

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