[英]Haskell - function that sorts list with strings by integer value
以下是我当前按升序对列表进行排序的代码:
qsort::[Int]->[Int]
qsort[]=[]
qsort(x:xs)
=qsort[y|y<-xs, y<=x]++[x]++qsort[y|y<-xs,y>x]
我将如何修改/创建对列表进行排序的 function,例如:
[("Bob",22),("Peter",38),("Charlie",19)]
通过 int 值
您可以解压缩 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
之间进行比较。
这是一个可能的策略。 首先,定义一个自定义的“小于或等于”运算符
lte :: (String, Int) -> (String, Int) -> Bool
lte (str1, int1) (str2, int2) = ...
然后,调整您的qsort
实现,将<=
的每次使用替换为对lte
的调用,并将>
的每次使用替换为对lte
的调用的否定。
用于上升
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)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.