奋斗的研究生 发表于 2015-10-28 20:26:13

如何将表进行排序

( (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.02" <图元名: -16ade8>) )
    (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.04" <图元名: -16ade8>) )
    (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.01" <图元名: -16ade8>) )
    (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.02" <图元名: -16ade8>) )
    (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.03" <图元名: -16ade8>) ))

   如何将图中的四个表按照“图号”的正常顺序01、02、03、04排序成如下:

( (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.01" <图元名: -16ade8>) )
    (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.02" <图元名: -16ade8>) )
    (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.02" <图元名: -16ade8>) )
    (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.03" <图元名: -16ade8>) )
    (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.04" <图元名: -16ade8>) ))




yshf 发表于 2015-10-28 21:36:18

(setq thlb '((("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.02" <图元名: -16ade8>) )
            (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.04" <图元名: -16ade8>) )
            (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.01" <图元名: -16ade8>) )
            (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.02" <图元名: -16ade8>) )
            (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)("图号" "NO.03" <图元名: -16ade8>) )
             )
)

(setq thlb (vl-sort thlb '(lambda(x y)
                              (< (atof (vl-string-subst "" "NO." (cadr (cadr x))))
                                 (atof (vl-string-subst "" "NO." (cadr (cadr y))))
                              )
                           )
            )
)

琴剑江山_10184 发表于 2015-10-28 21:50:28


    (setq a'((("建设单位" "镇江金顺有限公司" <图元名: -16add0>)
      ("图号" "NO.02" <图元名: -16ade8>)
      )
      (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)
      ("图号" "NO.04" <图元名: -16ade8>)
      )
      (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)
      ("图号" "NO.01" <图元名: -16ade8>)
      )
      (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)
      ("图号" "NO.02" <图元名: -16ade8>)
      )
      (("建设单位" "镇江金顺有限公司" <图元名: -16add0>)
      ("图号" "NO.03" <图元名: -16ade8>)
      )
       )
    )
(setq bb (vl-sort a
      '(lambda (a1 a2)
         (<(atof (substr (cadadr a1) 5))
      (atof (substr (cadadr a2) 5))
         )
       )
   )
);排序
;排序后的结果
((("建设单位" "镇江金顺有限公司" <图元名: -16ADD0>) ("图号" "NO.01" <图元名: -16ADE8>))
(("建设单位" "镇江金顺有限公司" <图元名: -16ADD0>) ("图号" "NO.02" <图元名: -16ADE8>))
(("建设单位" "镇江金顺有限公司" <图元名: -16ADD0>) ("图号" "NO.02" <图元名: -16ADE8>))
(("建设单位" "镇江金顺有限公司" <图元名: -16ADD0>) ("图号" "NO.03" <图元名: -16ADE8>))
(("建设单位" "镇江金顺有限公司" <图元名: -16ADD0>) ("图号" "NO.04" <图元名: -16ADE8>))
)





重慶崽兒 发表于 2015-10-28 21:55:29

我也来个:
(defun c:tt()
(setqa '(
             (("建设单位" "镇江金顺有限公司" <图元名: -16add0>) ("图号" "NO.02" <图元名: -16ade8>))
             (("建设单位" "镇江金顺有限公司" <图元名: -16add0>) ("图号" "NO.04" <图元名: -16ade8>))
             (("建设单位" "镇江金顺有限公司" <图元名: -16add0>) ("图号" "NO.01" <图元名: -16ade8>))
             (("建设单位" "镇江金顺有限公司" <图元名: -16add0>) ("图号" "NO.02" <图元名: -16ade8>))
             (("建设单位" "镇江金顺有限公司" <图元名: -16add0>) ("图号" "NO.03" <图元名: -16ade8>))
            )
   c nil
)
(setq b (vl-sort-i a (function (lambda (x y) (< (cadadr x) (cadadr y))))))
(foreach i b (setq c (append c (list (nth i a)))))
)

奋斗的研究生 发表于 2015-10-28 22:21:04

果然高手众多,谢谢

xyp1964 发表于 2015-10-28 22:34:28

(vl-sort lst '(lambda (x y) (< (cadadr x) (cadadr y))))

奋斗的研究生 发表于 2015-10-28 22:41:56

琴剑江山_10184 发表于 2015-10-28 21:50 static/image/common/back.gif


请问重复的怎么删除呢?

奋斗的研究生 发表于 2015-10-28 22:43:26

重复的怎么删除呢,是什么函数呢
页: [1]
查看完整版本: 如何将表进行排序