找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 476|回复: 0

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

[复制链接]
发表于 2023-4-24 21:32:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
用法:
  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 '=))

list@group-by.png




比较函数 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)))))
mj-group-by2.png
  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 函数用法
weixin-atlisp.png
list@sort-wx.png






mj-group-by.png
mj-group-by0.png
list@sort.png
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-4 21:57 , Processed in 0.259416 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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