簡體   English   中英

如何使用haskell中的列表過濾列表列表

[英]How to filter a list of lists using a list in haskell

我有這份清單

a = [["a","b","c"],["d","e","f"]]
b = ["a","b"]

我想使用 b 過濾 a

所以輸出應該是["a","b","c"]

b 中的所有元素都應該在 a 中

如果我正確理解您的問題,您希望獲取a中包含b所有元素的所有元素。 如果你想在元素b絕對是連續的a ,這個意願的伎倆:

import Data.List
f :: Eq a => [a] -> [[a]] -> [[a]]
f b a = filter (b `isSubsequenceOf`) a

如果由“綴比賽”,你的意思是,你的過濾條件是為b是在元素的綴a (而不是前綴或后綴),那么你可以使用isInfixOf ,從Data.List ,而不是在isSubsequenceOf在上面的例子中。

如果您想允許元素不連續的匹配(這在您的問題中不清楚),那么您可以這樣做:

f :: Eq a => [a] -> [[a]] -> [[a]]
f b a = filter (\el -> el `intersect` b == b) a
--or, in pointfree form
f b a = filter ((b ==) . (`intersect` b)) a

歸功於最后一段代碼的功勞

請注意,這些函數將返回所有可能的匹配項( [[a]] ); 如果您只想要第一個匹配項,只需模式匹配即可從包中提取第一個元素或 headMay safe

fOnly1 b a = case f b a of
  (x:_) -> Just x
  _     -> Nothing

fOnly1' b a = headMay $ f b a

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM