乐筑天下

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

[编程交流] 列表元素删除与简单

[复制链接]

11

主题

98

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 09:40:17 | 显示全部楼层 |阅读模式
好了,各位,
 
几个月前,我为其中一个委员会编写了一个数据收集程序,基本上读取了x数量的图形中的所有块,并将信息存储在MS access数据库中。这让我想到,在使用简单迭代将项目与列表中的项目匹配后,是否值得从数组中删除项目。例如
  1. ;For the sake of the discussion topic imagine vl-sort doesn't exist
  2. (setq BlockList(list
  3. [List of block objects from the block table]))
  4. (setq modelSpaceBlocks (list [<x> All blocks within modelspace]))
  5. (vlax-for BlockListc
  6. (setq i -1)
  7. (while (< (setq i(1= i))(length modelSpaceBlocks))
  8.    (if(equals (vla-getName c)(vla-getName (nth i modelSpaceBlocks))
  9.      (progn
  10.        ;Do something with the block
  11.        ;-------------------- Include or leave out? --------------
  12.         (vl-remove (nth i modelSpaceBlocks) modelSpaceBlocks)
  13.        ;----------------------------------------------------------
  14.      )
  15.    )
  16. )
  17. )
也许不是最好的例子,但肯定有一个点,其中x的值足够高,以至于每次都要遍历它。在这种情况下,前500个块的删除可能会减慢程序的速度,但随着列表的大小逐渐减小,该过程不会与冗余块进行比较。有人对这个问题有什么想法吗?或者更好的是,有人做过比较吗?
 
索利弗。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:44:03 | 显示全部楼层
我更关心的是你在BlockListc中通过相同的modelSpaceBlocks列表找到一个新的条目。
当您单步执行BlockListc时,只需检查其名称是否是预先单步执行的modelSpaceBlocks列表的成员(或vl位置),该列表只包含名称(mapcar的vla get name modelSpaceBlock)。
回复

使用道具 举报

11

主题

98

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 09:49:51 | 显示全部楼层
 
删除了i equal list长度-不应该出现在那里。
 
Mapcar肯定是一个更合适的设置,我花了太多时间在php lol上。
 
不要假设你可以提供一个如何实现vl位置的示例?
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 09:51:21 | 显示全部楼层
基于上述代码的代码片段(在这种情况下,成员是相同的,vl位置恰好快了一点点)。
 
  1. (setq modelSpaceBlocks (mapcar 'vla-getName modelSpaceBlocks))
  2. ;; STUFF
  3. (if (vl-position (vla-getName c) modelSpaceBlocks)
  4.    ;; DO STUFF
  5. )
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:55:06 | 显示全部楼层
 
没有意义的文字,所以我可以做这个帖子。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 09:56:28 | 显示全部楼层
 
只是好奇;也许我错过了什么。。。。
 
我认为这是一个重复的工作,逐步通过一个块集合,将Vla对象保存到一个列表(modelSpaceBlocks),只使用(mapcar’Vla get name modelSpaceBlocks)获得一个块名列表。。。相反,这不是更简单吗:
 
  1. (if (setq ss (ssget "_x" (list '(0 . "INSERT") (cons 410 (getvar 'ctab)))))
  2.    (progn
  3.      (vlax-for x (setq ss
  4.                     (vla-get-activeselectionset
  5.                       (vla-get-activedocument (vlax-get-acad-object))))
  6.        (if (not (vl-position (setq n (vla-get-name x)) blockList))
  7.          (setq blockList (cons (vla-get-name x) blockList))))
  8.      (if (vl-position "[color=red]blockName[/color]" blockList)
  9.        [color=seagreen];; do something
  10. [/color]        )
  11.      (vla-delete ss)))
回复

使用道具 举报

11

主题

98

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 10:00:30 | 显示全部楼层
啊,我明白你的意思了,我想:浏览一下列表,收集名字,然后用vl位置代替双vla get名字?
 
我认为最好是为每个块名创建一个列表列表,并将索引存储在每个列表中,例如:
  1. #
  2. (setq BlockIndices (list
  3. ("sampleBlockName" 1 25 40)
  4. ("otherBlock" 3 5 7)
  5. ))
并在区块列表迭代时使用vla项拾取项
 
这意味着modelSpaceBlocks列表的项目数将与blockList相同(或更少)。后面会有如下内容:
只有一个名称比较,然后映射器将其提取出来
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 10:04:20 | 显示全部楼层
很有可能,但根据我提供的信息,这是我能想到的最好的结果。不知道为什么他会有其他的名单。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 10:07:16 | 显示全部楼层
 
不用担心,您明确表示要提供一个基于OP代码的示例。
 
 
 
这让我困惑不已。。。
 
此外,注意语法:
 
  1. ([b]foreach[/b] [b][color=#0000ff]symbol[/color][/b] [color=red][b]List[/b][/color]

 
  1. 6
回复

使用道具 举报

11

主题

98

帖子

87

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
55
发表于 2022-7-6 10:09:33 | 显示全部楼层
 
哈哈,谢谢;我正在写代码在快速张贴甚至没有注意到我把它背对背:哈哈:
 
您引用的代码涵盖了通过modelSpaceBlocks的一次迭代中的所有比较,然后使用后续mapcar中的索引来收集与当前区块列表项名称相关的所有区块。如果使用sset获取块,则需要用于创建块索引的方法将有点混乱,或者至少不适合mapcar。然而,我认为这将拥有最少的vlax*、vla*、vl*调用
 
教育:
 
事后来看,这篇文章可能无法很好地解释区块索引列表的创建。我现在正在工作,但当我完成后会尝试发布一个合适的方法。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 00:37 , Processed in 0.427292 second(s), 72 queries .

© 2020-2025 乐筑天下

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