[英]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.