明经通道 Visual LISP 函数  
vl-sort-i
 

根据给定的比较函数对表中的元素排序,并返回元素的索引号

(vl-sort-i  list comparison-function)

参数

list

任意表。

comparison-function

比较函数。它可以是任何一个这样的函数:接受如下两个参数,如果第一个参数按排序顺序在第二个元素之前,则返回 T 或非 nil 值。comparison-function 的值可以采用如下格式:

返回值

表,其中包含 list 中元素的索引值,这些值按照 comparison-function 指定的次序排列。表中保留重复的元素。

示例

按降序排列字符表:

_$ (vl-sort-i '("a" "d" "f" "c") '>)
(2 1 3 0)

排序后,表的顺序为 "f" "d" "c" "a"。"f" 是原始表中的第三个元素(索引号为 2),"d" 是表的第二个元素(索引号为 1)依此类推。

按升序排列数值表:

_$ (vl-sort-i '(3 2 1 3) '<)
(2 1 3 0)

请注意在结果表中包含两个 3 的索引号。

按 Y 坐标对二维点表排序:

_$ (vl-sort-i '((1 3) (2 2) (3 1))
         (function (lambda (e1 e2)
                (< (cadr e1) (cadr e2)) ) ) )
(2 1 0)

对符号表排序:

_$ (vl-sort-i 
   '(a d c b a)
   '(lambda (s1 s2)
    (< (vl-symbol-name s1) (vl-symbol-name s2)) ) )
(4 0 3 2 1)

请注意结果中包含两个 a 的索引号。

明经通道 版权所有 未经许可 不得传播

 评论