我必須聲明如下(第一個參數的函數cc
是a
(列表),第二個參數是B(名單也一樣),它應該返回3號列表:列表操作
cc :: [(String, String)] -> [(String, String)] -> [(String, String)]
cc a b = do
例子:
a = [("aaa", "xxx"), ("bbb", "xxx")]
b = [("xxx", "ccc"), ("xxx", "ddd")]
c should be [("aaa", "ccc"), ("aaa", "ddd"), ("bbb", "ccc"), ("bbb", "ddd")]
c
是和的a
組成b
其中每個a
雙第二「指數」是第一b
雙「索引」。 所以a
(「aaa」,「xxx」)對的第二個「索引」是「xxx」,其定義爲b
(「xxx」,「ccc」)第一個「索引」。關於我們在返回列表中創建(添加)這個新對(「aaa」,「ccc」)。
問題是如何在Haskell中做到這一點? :)
最好的問候!
這很好用:)只適用於情況cc [(「a」,「b」),(「a」,「d」),(「a」,「e」)] [ (「b」,「c」),(「d」,「c」)]它返回dublicates [(「a」,「c」),(「a」,「c」)]。我們怎樣才能刪除dublicates? – werd
刪除重複項的最少代碼是使用'Data.List'中的'nub'。因爲只需要一個'Eq'實例,所以它的複雜度是二次的,但是,如果你想要更好的複雜性並且有一個'Ord'實例,'import Data.Set'和'Data.Set.toList。 Data.Set.fromList'刪除O(n * log n)中的重複項,但不考慮原始列表中元素的順序。如果你想讓O(n * log n)保持原來的順序,這有點複雜。 –
太棒了!非常感謝 ;) – werd