如何过滤列表,保留与模式匹配的项目,删除不匹配的项目?
例如,如果我有一个列表列表,我想要一个函数......
singleItemLists :: [[Int]] -> [[Int]]
Run Code Online (Sandbox Code Playgroud)
...删除所有与模式不匹配的项目[x]。
理想情况下,将答案转换为其他模式应该相当简单。
基于显式模式匹配的惯用版本filter是:
{-# LANGUAGE LambdaCase #-}
isSingleton :: [x] -> Bool
isSingleton = \case [_] -> True ; _ -> False;
singletonLists :: [[x]] -> [[x]]
singletonLists = filter isSingleton
Run Code Online (Sandbox Code Playgroud)
我相信这更具可读性。作为一个额外的优势,我们得到isSingleton,它可以被重用于其他目的。
isSingleton 在内部列表的脊椎和元素中是懒惰的。
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |