2011-11-08 94 views
5

我有一個問題,我必須操縱浮動列表的列表。 [[浮動]]。這些浮動列表的長度是4.我想刪除前三個元素被測試的重複項,但忽略第四個元素。這是一個多部分問題的最後一部分,我一直在牆上敲打我的頭,一段時間搞清楚如何使用它。我找不到任何有用的信息。難以理解如何使用nubBy

fixDuplicates :: [[Float]] -> [[Float]] 
fixDuplcates [[]] = [[]] 
fixDuplicates x = nubBy ? 
+2

主題評論:如果第四個數字是特殊的,也許你應該在定義數據類型時以某種方式來確定它?一種如何使用結構w /有意義的名稱來存儲記錄而不是使用值數組的方法。 – hugomg

+0

的數據類型是預定義的,我有給什麼IM –

+0

您可以創建一個轉換函數,那麼工作;) – hugomg

回答

10

nubBy接受函數用於比較元素的相等性。您對平等的定義是,如果前三個要素匹配,那麼兩個列表是平等的。一個簡單的實現是:

fixDuplicates xs = nubBy firstThreeMatch xs 
    where firstThreeMatch ys zs = take 3 ys == take 3 zs 
+8

能載重複而成爲'塊狀((==)\'上\'取3)'有附加導入'Data.Function'。 – ephemient

+0

非常完美,非常感謝,我的程序現在完美運行。 –