以下是我當前按升序對串列進行排序的代碼:
qsort::[Int]->[Int]
qsort[]=[]
qsort(x:xs)
=qsort[y|y<-xs, y<=x] [x] qsort[y|y<-xs,y>x]
我將如何修改/創建一個對串列進行排序的函式,例如:
[("Bob",22),("Peter",38),("Charlie",19)]
通過 int 值
uj5u.com熱心網友回復:
您可以將專案解包為 2 元組:
qsort::[Int] -> [Int]
qsort [] = []
qsort(x@(_,vx):xs) = qsort [ y | y@(_, vy) <-xs, … ] [x] qsort [ y | y@(_, vy) <- xs, … ]
這里還需要填寫…部分。的vx是的值x,并且vy是元素的值y。因此,您需要在vx和之間進行比較vy。
uj5u.com熱心網友回復:
這是一個可能的策略。首先,定義一個自定義的“小于或等于”運算子
lte :: (String, Int) -> (String, Int) -> Bool
lte (str1, int1) (str2, int2) = ...
然后,調整您的qsort實作,將每次使用替換為<=對 的呼叫lte,并將每次使用>替換為對呼叫的否定lte。
uj5u.com熱心網友回復:
上升
test = sortBy (compare `on` snd) [("Bob",22),("Peter",38),("Charlie",19)]
下降
test = sortBy (flip compare `on` snd) [("Bob",22),("Peter",38),("Charlie",19)]
或者下降,
import Data.Function (on)
import Data.Ord (Down(Down))
test = sortOn Down [("Bob",22),("Peter",38),("Charlie",19)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/386725.html
