通过在方案中的对所述第二元件分选对列表(Sorting list of pairs by the s

2019-08-03 06:06发布

我有方案,该方案给我对列表的过程,我需要排序的对的第二个元素降这个名单。 像这样:

((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))

我不知道我应该怎么使用排序这一点。

Answer 1:

只需使用内置的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一个合适的比较过程作为第二个参数。



文章来源: Sorting list of pairs by the second element of the pairs in scheme