簡體   English   中英

Haskell:篩選帶條件的元組列表

[英]Haskell: Filter a list of tuples with condition

我有一個要應用某些條件的元組列表。 Il看起來很簡單,但我對此深信不疑。 元組列表已准備就緒

例如: [(10,11),(11,10),(11,12),(12,11),(13,15),(13,14)]

我想返回一個相同元組的列表,但是當一個元組(x1,y1)和(x2,y2)其中x1 == y2和y1 = x2並屬於該列表時,僅返回(x1,y1)一個

我的函數頭

myFun :: Ord a => [(a,a)] -> [(a,a)]
    myFun = ....

預期結果應該是這樣(來自同一列表)

[(10,11),(11,12),(13,15),(13,14)]

任何跡象,想法或提示都歡迎。

經過一番嘗試,我想到了這個:

myFun::Ord a => [(a,a)] -> [(a,a)]
myFun ls = auxfun [] ls

auxfun:: Eq a => [(a,a)] -> [(a,a)] -> [(a,a)]
auxfun [] [] = []
auxfun [] (l:ls) = auxfun [l] ls
auxfun ls [] = ls
auxfun ls1 ((x,y):ls2)
    |(y,x) `elem` ls1 = auxfun ls1 ls2
    |otherwise = auxfun ((x,y):ls1) ls2

這將在測試用例中返回[[13,14),(13,15),(11,12),(10,11)],以防順序很重要,您可以將其反轉。

此解決方案無需使用任何庫,否則您可以像其他人所說的那樣使用nubBy。

我已經看到它已經得到了回答,但是由於haskell非常有趣,並且總是有更多可能的解決方案,因此我將添加一個發現的解決方案:

foldr (\x y -> if x == rev (head) y then (x:tail y) else x:y) [rev $ last xs] xs where
  rev (a,b) = (b,a)

暫無
暫無

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

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