数字后缀的字符串,按X排序
本帖最后由 xjf 于 2012-10-13 00:03 编辑请问大师,带数字后缀的字符串. 只按X的大小排序怎么写啊?
如(("P-3" (-1 . <图元名: -3d60d8>)) ("P-20" (-1 . <图元名: -3d6148>)) ("D-9" (-1 . <图元名: -38b4d0>)) ("P-25" (-1 . <图元名: -3d5fb8>)))
这样的
本帖最后由 Gu_xl 于 2012-10-16 21:18 编辑
xjf 发表于 2012-10-14 23:55 static/image/common/back.gif
大侠,我现在要只排点对中的X序,,请赐教
带数字后缀的字符串. 只按X的大小排序怎么写啊?
(defun sort (l)
(vl-sort l
'(lambda (a b / a1 a2 b1 b2)
(setq a1 (substr (car a) 1 (setq n (vl-string-search "-" (car a))))
a2 (substr (car a) (+ 2 n))
b1 (substr (car b) 1 (setq n (vl-string-search "-" (car b))))
b2 (substr (car b) (+ 2 n))
)
(if (= a1 b1)
(< (atof a2) (atof b2))
(< a1 b1)
)
)
)
) 排序的问题 旧帖中一搜就有...
楼主重新立题提问应是很急
问题并不是那么艰深,但得不到想要的回应,原因何在!?
学问,学问,学着问...
且向老帖中观摩去呗,问对了如叩钟之应...
P.S. 看了,但仍处迷雾中... X在哪儿呢?没看懂! 本帖最后由 xjf 于 2012-10-15 00:03 编辑
大侠,我现在要只排点对中的X序,,请赐教
带数字后缀的字符串. 只按X的大小排序怎么写啊?
如(("P-3" (-1 . <图元名: -3d60d8>)) ("P-20" (-1 . <图元名: -3d6148>)) ("D-9" (-1 . <图元名: -38b4d0>)) ("P-25" (-1 . <图元名: -3d5fb8>)))
这样的
以下链接是求助的最初贴子:
http://bbs.mjtd.com/thread-96701-1-1.html
最终效果要是这样:
(("D-9" (-1 . <图元名: -38b4d0>)) ("P-3" (-1 . <图元名: -3d60d8>)) ("P-20" (-1 . <图元名: -3d6148>)) ("P-25" (-1 . <图元名: -3d5fb8>)))
等到G版到来,就看到了曙光 斗胆问下G版,你的答案可否注解下, 已经可以用了,
但是不懂里面的是怎样运算的?? Gu_xl 发表于 2012-10-13 00:01 static/image/common/back.gif
版主,请问这类数据(("T3" 78.5602 58.2632 123.621) ("T11" 183.444 90.8095 222.345) ("K9" 116.679 98.4267
; 344.564) ("K22" 148.559 59.1865 456.233) ("T13" 118.074 73.3384 222.345) ("T8"
; 152.483 82.1334 344.567) ("K5" 92.8691 83.3004 345.312) ("K11" 172.091 67.3096
; 234.521)))如何按每个表的第一个元素排序? 希望的结果:
(("K5" 92.8691 83.3004 345.312) ("K9" 116.679 98.4267 344.564) ("K11"
172.091 67.3096 234.521) ("K22" 148.559 59.1865 456.233) ("T3" 78.5602
58.2632 123.621) ("T8" 152.483 82.1334 344.567) ("T11" 183.444 90.8095
222.345) ("T13" 118.074 73.3384 222.345)) yuanziyou 发表于 2012-12-23 00:01 static/image/common/back.gif
版主,请问这类数据(("T3" 78.5602 58.2632 123.621) ("T11" 183.444 90.8095 222.345) ("K9" 116.679 98 ...
我都搜索过 几个函数都不能正确排序,自己也试着编过,不过能力有限 另外一个处方:
下载 Lsort.Lsp By Tony Tanzillo
Ref: http://www.theswamp.org/index.php?topic=40302.0
他处请自行搜寻...
给您编了个参考子函数
(defun Rval (x) (read (substr x 2)))
(defun ByAN (Lst1 Lst2)
(setq str1 (car Lst1)
str2 (car Lst2)
)
(cond
((equal
(setq a (substr str1 1 1))
(setq b (substr str2 1 1))
)
(< (Rval str1) (Rval str2))
)
(T (< a b))
)
)
Lst 指向您的示例
Command: (LSort lst 'ByAN)
(("K5" 92.8691 83.3004 345.312) ("K9" 116.679 98.4267 344.564) ("K11" 172.091
67.3096 234.521) ("K22" 148.559 59.1865 456.233) ("T3" 78.5602 58.2632 123.621)
("T8" 152.483 82.1334 344.567) ("T11" 183.444 90.8095 222.345) ("T13" 118.074
73.3384 222.345))
页:
[1]
2