使用自定義data
類型通常是更好的選擇,但如果你真的想使用的元組,你可以通過定義將基於的第一個元素於輔助功能comparingFst
啓動元組。
import Data.Ord
import Data.List
-- Dummy data types for example purposes. Derive from Show just so
-- that the example can be more easily tested interactively in ghci.
data Aa = Aa deriving Show
data Cc = Cc deriving Show
type Something = (Float, Float, Int, Aa, Cc, Int)
comparingFst :: Something -> Something -> Ordering
comparingFst = comparing fstSomething
where fstSomething (x,_,_,_,_,_) = x
現在您可以用較小的兩個要素:
findMin :: Something -> Something -> Something
findMin x y = case comparingFst x y of
LT -> x
_ -> y
或元素
findMinimum :: [Something] -> Something
findMinimum = minimumBy comparingFst
的服務,您也可以使用相同的輔助函數進行排序:
sortSomethings :: [Something] -> [Something]
sortSomethings = sortBy comparingFst
另外,值得一提的是,默認情況下,元組從第一個元素開始進行元素比較,因此假設您的Aa
和Bb
類型可以從Ord
和Eq
派生,則不需要任何額外的東西,即示例變爲:
import Data.List
data Ab = Ab deriving (Show, Ord, Eq)
data Cc = Cc deriving (Show, Ord, Eq)
type Something = (Float, Float, Int, Ab, Cc, Int)
findMin :: Something -> Something -> Something
findMin x y = min x y
findMinimum :: [Something] -> Something
findMinimum = minimum
sortSomethings :: [Something] -> [Something]
sortSomethings = sort
換句話說,你可以使用標準的min
和sort
功能原樣。
「fst」和「snd」僅適用於具有兩個元素的元組。對於任何事情,你可能比其他人建議的「數據某事= ...」更好。 – 2011-04-28 07:13:55