在 Haskell 中按长度过滤列表项

问题描述 投票:0回答:3

我有一个类似

["a","ab","abc", "abcd"]

的列表

如何获取仅包含长度> 2的项目的列表。

表示结果是

["abc","abcd"].

haskell
3个回答
13
投票

Natalie 的答案是完全正确的,但作为替代形式,你也可以将其写为

filter ((> 2) . length) ["a", "ab", "abc", "abcd"]

或者将列表理解为

[str | str <- ["a", "ab", "abc", "abcd"], length str > 2]

三者是等价的


10
投票
filter (\x -> length x > 2) ["a","ab","abc", "abcd"]

0
投票

输入的形式为

[[a]]
,它不能保证长度不是无限的。因此,依靠
length
甚至完成总体上来说是过于乐观的,而且如果这样做的话效率也很低。最好将条件表示为模式匹配:

[ xs | xs@(_:_:_:_) <- ["a","ab","abc","abcd"] ]

将此表达式写为

filter
留给读者作为练习。

© www.soinside.com 2019 - 2024. All rights reserved.