martinzyly 发表于 2012-11-14 17:58:49

【求助】如何使用vl-sort实现二维数组排序?

例如有以下数组(a1 b1) (a2 b2) (a3 b3) (a4 b4) (a5 b5)... (an bn)要实现的排序规则为:按an从大到小顺序排列,如果存在an相等的数组,则这些数组按bn从大到小排列。
例如,一数组排序完成后为:(2 0) (5 5) (6 1) (6 4) (8 4) (9 3) (9 8) (9 9)

使用vl-sort函数实现

希望大家多帮忙,非常感谢!

阿然 发表于 2012-11-14 21:03:50

(setq mylist ' ((2 0) (5 5) (6 1) (6 4) (8 4) (9 3) (9 8) (9 9))
(setq        mylist
       (vl-sort mylist
                  (function (lambda (e1 e2) (< (car e1) (car e2))))
       )
)

阿然 发表于 2012-11-14 21:04:51

第一行setq最后少个右括号

Gu_xl 发表于 2012-11-14 21:11:28

(vl-sort l '(lambda (a b) (if (= (car a) (car b)) (> (cadr a) (cadr b)) (> (car a) (car b)))))

martinzyly 发表于 2012-11-19 10:10:23

阿然 发表于 2012-11-14 21:03 static/image/common/back.gif
(setq mylist ' ((2 0) (5 5) (6 1) (6 4) (8 4) (9 3) (9 8) (9 9))
(setq        mylist
       (vl-sort mylist


谢谢,但只实现了第一个元素的递增排序,我就是不知道怎么排第二个

martinzyly 发表于 2012-11-19 10:20:04

Gu_xl 发表于 2012-11-14 21:11 static/image/common/back.gif
(vl-sort l '(lambda (a b) (if (= (car a) (car b)) (> (cadr a) (cadr b)) (> (car a) (car b)))))

太好了,非常感谢,lambda函数还是用不习惯啊

ll_j 发表于 2012-11-19 10:35:33

martinzyly 发表于 2012-11-19 10:10 static/image/common/back.gif
谢谢,但只实现了第一个元素的递增排序,我就是不知道怎么排第二个

超版那个可以连第二个一起排。
页: [1]
查看完整版本: 【求助】如何使用vl-sort实现二维数组排序?