按方案中对的第二个元素对对列表进行排序

时间:2012-11-27 18:31:29

标签: sorting scheme

我有方案中的程序给我一个对的列表,我需要按对的第二个元素对这个列表进行排序。像这样:

((1 . 1) (2 . 3) (3 . 2)) --> ((2 . 3) (3 . 2) (1 . 1))
((1 . 1) (x . 3) (2 . 1) (3 . 1)) --> ((x . 3) (1 . 1) (2 . 1) (3 . 1))
((1 . 3) (3 . 4) (2 . 2)) --> ((3 . 4) (1 . 3) (2 . 2))

我不知道应该如何使用排序。

1 个答案:

答案 0 :(得分:3)

只需使用内置的sort程序:

(define (sort-desc-by-second lst)
  (sort lst
        (lambda (x y) (> (cdr x) (cdr y)))))

(sort-desc-by-second '((1 . 1) (2 . 3) (3 . 2)))
=> '((2 . 3) (3 . 2) (1 . 1))

这里的技巧是将sort作为第二个参数传递给适当的比较程序。