明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1094|回复: 4

[函数] 【@lisp函数库】list:group-by 按给定特征对表内元素分组。

  [复制链接]
发表于 2023-4-24 09:18:52 | 显示全部楼层 |阅读模式
本帖最后由 vitalgg 于 2023-4-24 09:28 编辑


用法:
  1. (list:group-by lst 'fun)


示例:
比如一组整数 lst = ( 1 3 5 1 4 5 3 8 2)
(setq lst '(1 3 5 1 4 5 3 8 2))
因为内部有相同的元素,我们无法使用 vl-sort 排序。所以使用 list:sort 进行无损排序
(setq lst (list:sort lst '<))
然后把相同的元素进行分组
(setq res (list:group-by lst '=))



比较函数 fun 的说明示例。
对于一个图元表 lst, 内容为 (ent1 ent2 ent3 ent4 ....entn)
如果我们要对它按特定特征分组。需要分两步进行。
1、按特征进行排序,比如 都是 单行文本 text 按 内容排序。
(setq lst (vl-sort lst '(lambda(x y) (< (entity:getdxf x 1)(entity:getdxf y 1)))))
2、按特征分组,fun 的意思是特征相同返回真,则分为一组。
(setq lst (list:group-by lst '(lambda(x y) (= (entity:getdxf x 1)(entity:getdxf y 1)))))

  1. (defun list:group-by (lst fun / res g)
  2.   "对已排序的列表lst进行分组。fun为分组依据"
  3.   "lst"
  4.   "(list:group-by '(a a a b b c)
  5.     '(lambda(x y)(= x y)))
  6.   => ((a a a)(b b)(c))"
  7.   (setq res nil)
  8.   (setq g (cons (car lst)
  9.       nil))
  10.   (while (setq lst (cdr lst))
  11.     (setq a% (car lst))
  12.     (if ((eval fun)
  13.         (car g)
  14.         a%)
  15.       (setq g (cons a% g))
  16.       (progn (setq res (cons (reverse g)
  17.             res))
  18.         (setq g (cons a% nil)))))
  19.   (if g (setq res (cons (reverse g)
  20.         res)))
  21.   (reverse res))







无须复制,在CAD内 安装 @lisp ,可以直接调用这个函数。

将以下代码复制到 CAD 命令行内,回车即可开始安装。
(在代码行里用鼠标连续三击全选,然后右键复制或Ctrl+C 。到CAD命令行内,右键粘贴或Ctrl+V)
  1. (progn(vl-load-com)(setq s strcat h "http" o(vlax-create-object (s"win"h".win"h"request.5.1"))v vlax-invoke e eval r read)(v o'open "get" (s h"://atlisp.""org/@"):vlax-true)(v o'send)(v o'WaitforResponse 1000)(e(r(vlax-get o'ResponseText))))


关注 公众号,快速查看 @lisp 函数用法





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-6-8 10:58:34 | 显示全部楼层
想问一下楼主,这个支持中望不?用这个函数库写出来的lisp中望能用么?昨天搜索的时候发现了这个,发现是论坛上的大佬弄的,想来了解一下
 楼主| 发表于 2023-6-8 14:15:12 | 显示全部楼层
hadessna 发表于 2023-6-8 10:58
想问一下楼主,这个支持中望不?用这个函数库写出来的lisp中望能用么?昨天搜索的时候发现了这个,发现是论 ...

中望2021以上支持自动配置,以前的版本的可能安装会有问题。需要手动配置。
配置好了是可以用的。
发表于 2023-6-11 21:59:39 | 显示全部楼层
不错不错,很好的帖子
发表于 2024-6-15 13:06:05 | 显示全部楼层
感谢张大,解决了图元分组的烦恼
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-29 08:17 , Processed in 0.185763 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表