tsotzo 发表于 2022-7-5 16:33:56

将大量选定整数放入

你好
 
假设我们在dwg中有一组整数作为文本。
从给定的整数开始,我们如何将它们按1(+1)的升序排列?
让我举个例子来说明这一点。假设我们有文本1 2 5 5 5 8 9 11 15,给定的起始整数是6。我们一起选择它们,选择集中的范围是随机的。让我们说5 2 8 15 1 5 5 11 9 11。
现在,我们想把它们按升序排列,从数字6开始,用新的替换“旧”范围。最后,我们必须做到:
6 7 8 8 8 9 10 11 11 12.
即6(代替1)、7(代替2)、8(5)、8(5)、8(5)、9(、10(9)、11(11)、11(11)、12(15)。我希望这是清楚的。
我们如何有效地做到这一点?
 
提前感谢您,
科斯塔斯

tsotzo 发表于 2022-7-5 16:40:44

9(, = 9 ( 8 )

Lee Mac 发表于 2022-7-5 16:49:05

考虑以下代码:
(defun renumberlist ( num lst )
   (setq lst (vl-sort lst '(lambda ( a b ) (< (atoi a) (atoi b))))
         num (1- num)
   )
   (mapcar '(lambda ( a b ) (if (= a b) (itoa num) (itoa (setq num (1+ num))))) (cons nil lst) lst)
)
例子:
_$ (renumberlist 6 '("5" "2" "8" "15" "1" "5" "5" "11" "9" "11"))
("6" "7" "8" "8" "8" "9" "10" "11" "11" "12")

Grrr 发表于 2022-7-5 16:52:09

令人印象深刻的是,你理解人们任务/问题的速度有多快。

tsotzo 发表于 2022-7-5 16:59:18

谢谢李!我将尝试将您的代码导入我的例程。如果我做不到,我会回到你身边。(这是很有可能的,因为你的编码比我的要高得多)。谢谢

Lee Mac 发表于 2022-7-5 17:09:07

 
谢谢
 
 
不客气,佐。我的代码演示了一种可能的对一组文本值进行排序和重新编号的方法,但是,假设您希望修改文本内容,那么在排序和重新编号过程中,您需要保留文本对象的实体名称-如果您陷入困境,我很乐意对此进行演示。

Lee Mac 发表于 2022-7-5 17:12:49

为了好玩,这里有一个递归函数,它接受排序列表以生成相同的结果:
(defun renum ( num lst )
   (if lst (cons (itoa num) (renum (if (= (car lst) (cadr lst)) num (1+ num)) (cdr lst))))
)
例子:
_$ (renum 6 (vl-sort '("5" "2" "8" "15" "1" "5" "5" "11" "9" "11") '(lambda ( a b ) (< (atoi a) (atoi b)))))
("6" "7" "8" "8" "8" "9" "10" "11" "11" "12")

tsotzo 发表于 2022-7-5 17:17:22

这是正确的!

Lee Mac 发表于 2022-7-5 17:25:06

好吧,我忍不住
 
(defunc:renum(/a b i l n s x y z)(initget4)(setqn(1-(getint”\n指定起始数字:“)(1))(if(“:l”'((0.“TEXT”)(1.“~*[~0-9]*”))(progn(repeat(setqi(sslengths))(setqx(entget(ssnames(setqi(1-i))))a(cons(assoc-1 x)a)b(cons(atoi(cdr(assoc1 x)))(setqi(vl-sort-ib'

tsotzo 发表于 2022-7-5 17:31:29

&& . 李,当我第一次读到你的留言时,我发自内心地笑了,然后。。。哇!我说不出话来。。。!你真是难以置信!你知道,我写的代码行比你多出一倍,我甚至不在中间!我能说什么。。。谢谢你,伙计!!你知道,令人印象深刻的不仅仅是你解决了问题,还有你解决问题的方式(当然还有速度)。再次感谢!
页: [1] 2
查看完整版本: 将大量选定整数放入