繁体   English   中英

Haskell - function 按 integer 值对带有字符串的列表进行排序

[英]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, … ]

在这里,您仍然需要填写部分。 vxx的值, vy是元素y的值。 因此,您需要在vxvy之间进行比较。

这是一个可能的策略。 首先,定义一个自定义的“小于或等于”运算符

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM