我正在嘗試按第二個元素對這個元組陣列進行排序,但如果要比較的元素相等,我想根據第一個元素對它們進行排序。我已經完成了研究,但只能找到按第一個元素或第二個元素排序,而不是同時檢查兩者
這就是我到目前為止所擁有的:
sortTupleSndFirst :: (Ord a, Ord b) => [(a,b)] -> [(a,b)]
sortTupleSndFirst = sortBy(flip compare `on` snd)
people = [("Hal", 20), ("Susann", 31),("Dwight", 19), ("Kassandra", 21), ("Lawrence", 25), ("Cindy", 22), ("Cory", 27), ("Mac", 19), ("Romana", 27), ("Doretha", 32), ("Danna", 20), ("Zara", 23), ("Rosalyn", 26), ("Risa", 24), ("Benny", 28), ("Juan", 33), ("Natalie", 25)]
main:: IO ()
main =
do
print(sortTupleSndFirst people)
我的輸出是:
[("Juan",33),("Doretha",32),("Susann",31),("Benny",28),("Cory",27),("Romana",27),( "Rosalyn",26),("Lawrence",25),("Natalie",25),("Risa",24),("Zara",23),("Cindy",22),("Kassandra ",21),("哈爾",20),("丹娜",20),("德懷特",19),("麥克",19)]
但我需要交換 Hal 和 Danna,因為他們有相同的數字,但他們的名字需要按字母順序排列
uj5u.com熱心網友回復:
您可以制作一個映射的函式,(x, y)以便(Down y, x)它首先按降序排列在第二個專案上,然后按第一個專案:
import Data.List(sortOn)
import Data.Ord(Down(Down))
sortTupleSndFirst = sortOn (\(x, y) -> (Down y, x))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/532449.html
標籤:排序哈斯克尔仿制药元组
