haskell - Haskell 按列表索引过滤
问题描述
我有功能:
isEven n = (mod n 2) == 0
我只想要偶数,我得到:
filter isEven [1, 2, 3, 4 ,5 ,6] -- -> 2, 4, 6
到现在为止还挺好。
我的问题是:函数中是否有可以按列表索引过滤的功能?(您可以想象 js 过滤器,其中第二个参数是索引)。
如果没有,是否有任何理由不包括在内,我怎样才能以一种好的haskell方式做到这一点?
解决方案
如果您想要一个同时过滤值和索引的函数,您可以自己编写如下:
filterIndexed :: (a -> Int -> Bool) -> [a] -> [a]
filterIndexed p xs = [x|(x,i) <- zip xs [0..], p x i]
它使用了一个列表理解,这对这种事情(过滤器和项目)非常有用。这不在标准库中的原因是因为它是一种相对罕见的操作,并且直接在代码中具有列表理解相当容易。
推荐阅读
- codeigniter - CodeIgniter 3.1.9 - 调用未定义的方法 stdClass::base_url()
- perl - 在 Perl 中使用 'gradlew' 挂断
- typescript - 使用函数重载进行解构
- javascript - 如何从 iframe 中删除滚动条并仍然在其中滚动?
- java - 我的java项目中的gradle依赖关系如何映射
- c - 在 C 中管道标准输出
- php - RedbeanPHP 多对多关系 - 奇怪的行为
- javascript - JS:遍历div列表以通过onclick添加事件?
- php - 从非静态的多维数组中获取页面 id
- php - 如何正确使用 AngularJS $http.post 通过 PHP 更新 MySQLi 表?