我有一个类似
["a","ab","abc", "abcd"]
的列表
如何获取仅包含长度> 2的项目的列表。
表示结果是
["abc","abcd"].
Natalie 的答案是完全正确的,但作为替代形式,你也可以将其写为
filter ((> 2) . length) ["a", "ab", "abc", "abcd"]
或者将列表理解为
[str | str <- ["a", "ab", "abc", "abcd"], length str > 2]
三者是等价的
filter (\x -> length x > 2) ["a","ab","abc", "abcd"]
输入的形式为
[[a]]
,它不能保证长度不是无限的。因此,依靠length
甚至完成总体上来说是过于乐观的,而且如果这样做的话效率也很低。最好将条件表示为模式匹配:
[ xs | xs@(_:_:_:_) <- ["a","ab","abc","abcd"] ]
将此表达式写为
filter
留给读者作为练习。