可能重複:
Sort a list of tuples by their second elements排序第2元組元素的元組的列表
嘿,我有一個元組列表,看起來像這樣
[("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
我希望根據元組中第二個元素的整數列表的長度以遞增順序對列表進行排序,但m y haskell最好是窮人,我無法想出辦法做到這一點。
可能重複:
Sort a list of tuples by their second elements排序第2元組元素的元組的列表
嘿,我有一個元組列表,看起來像這樣
[("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
我希望根據元組中第二個元素的整數列表的長度以遞增順序對列表進行排序,但m y haskell最好是窮人,我無法想出辦法做到這一點。
大多數排序問題可以用sortBy ::(a -> a -> Ordering) -> [a] -> [a]
函數解決。因此,任務是生成排序函數,該函數根據元組的第二個元素的長度比較兩個元素。我們實際需要的是compare `on` (length . snd) :: (a1, [a]) -> (a1, [a]) -> Ordering
。
eblo> sortBy (compare `on` (length . snd)) [("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
[("y",[1,2]),("x",[1,2,3]),("z",[1,2,3,4])]
sortBy (comparing $ length . snd) [("x", [1,2,3]), ("y", [1,2]), ("z", [1,2,3,4])]
作爲參考(對於其他讀者),'sortBy'不在Prelude中,而是Data.List,而'comparator'在Data.Ord中 – 2014-12-10 20:00:15
輝煌非常感謝你非常有幫助 – user1226239 2012-02-22 22:37:25
你不能有降價語法* *內碼的跨度,但你可以在一個鏈接包裹整個碼跨度。 – 2012-02-22 23:30:54