Haskell技术问题:从列表列表中筛选含若干1的子列表
解决Haskell中子列表的筛选问题
我懂你现在的需求:从digitosAgrupados n生成的、由0和1组成的子列表集合里,提取出至少包含一个1的子列表对吧?
你之前用的filter (all odd) xss之所以没达到预期,是因为all odd会要求子列表里的每一个元素都是奇数(也就是全是1),这和你要的“包含若干1”(只要有一个就行)的需求完全不符。
正确的实现方式
你应该用any函数替代all,因为any的作用是检查子列表中是否存在至少一个满足条件的元素。针对你的场景,有两种等价的写法:
- 更直观的写法(明确检查是否包含1):
filter (any (==1)) xss - 利用1是奇数、0是偶数的特性简化:
filter (any odd) xss
举个例子对比效果
假设digitosAgrupados n返回的列表是:
[[0,0], [1,0], [1,1], [0]]
- 用你原来的
filter (all odd),得到的结果是[[1,1]](只有全是1的子列表被保留) - 用
filter (any (==1)),得到的结果是[[1,0], [1,1]](所有包含至少一个1的子列表都被保留),这正是你需要的效果。
内容的提问来源于stack exchange,提问作者mathandtic
相关产品推荐
相关产品推荐

