乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 99|回复: 3

[编程交流] 在选择中查找最大数量

[复制链接]

63

主题

242

帖子

181

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2022-9-11 17:01:50 | 显示全部楼层 |阅读模式
我需要一个可以在包含数字和文本字符串的选择中找到最大值数字的 lisp
任何帮助将不胜感激.
回复

使用道具 举报

15

主题

1052

帖子

58

银币

中流砥柱

Rank: 25

铜币
683
发表于 2022-9-11 17:29:05 | 显示全部楼层
使用 atof 将字符串转换为数字
将其添加到列表中
使用 vl-sort > 在列表中
输出列表中的第一个数字
  1. ;;----------------------------------------------------------------------------;;
  2. ;;List Maximum Value
  3. (defun C:MValue (/ ss txt lst)
  4.   (if (setq ss (ssget '((0 . "*TEXT"))))
  5.     (foreach txt (vl-remove-if 'listp (mapcar 'cadr (ssnamex SS)))
  6.       (setq value (atof (cdr (assoc 1 (entget txt)))))
  7.       (setq lst (cons value lst))
  8.       (setq lst (vl-sort lst '>))
  9.     )
  10.   )
  11.   (prompt (strcat "\nMaximum Value: " (rtos (car lst) 2)))
  12.   (princ)
  13. )

回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
319
发表于 2022-9-11 17:59:23 | 显示全部楼层
如果您的字符串包含字母和数字可能需要在 atof 之前做更多的事情        
  1. (setq lst (car lst))
或者这样
  1. (setq lst (nth 0 lst))
两者都将变量lst设置为该列表中的第一个值,并删除所有其他值。
我认为RonJonp提供了一个同样的解决方案。
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-9-11 18:18:36 | 显示全部楼层
  1. (defun c:foo (/ ss)
  2.   (if (setq ss (ssget '((0 . "*TEXT"))))
  3.     (print (apply 'max
  4.                   (mapcar '(lambda (x) (atof (cdr (assoc 1 (entget x)))))
  5.                           (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
  6.                   )
  7.            )
  8.     )
  9.   )
  10.   (princ)
  11. )

回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-1-31 07:47 , Processed in 0.192011 second(s), 60 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表