无痕/ws 09:35:05
x = set.count
for i = x to 0 step -1
...
set(i).delete
x=x-1
next i
但这可能会存在一个问题
例如set(3)被删除,原集合中的set(4),是不是会变成set(3)呢?
[mccad]mccad 09:38:44
x=set.count-1
for i=x to 0 step -1
里面就不要再出现x=x-1了
[mccad]mccad 09:39:40
而删除是从选择集的后面向前面删除,所以不会出现你说的先删除(3)再删除(4)的问题
无痕/ws 09:40:34
问题在于set(i).delete后,x就不等于set.count了,会提示错误
我是在set中查找符合条件的删除
所以并不是自后到前逐一删除。
无痕/ws 09:42:47
是不是得换种方法,建个文本数组,把查找符合条件的图元的句柄记录到这个数组,最后做个循环,逐一将这些句柄的图元删掉
[mccad]mccad 09:43:34
当然最好,但这种删除方法从后向前删除,就算有选择性的删除也不应该会出现错误的
X不等于set.count也没有关系
因为是从后向前,只要x值不会超过选择集的总数,就不会出错
[mccad]mccad 09:45:05
选择集会随着删除而变化,但这种循环机制并不是象foreach那样直接针对选择集
而只是每次循环只针对选择集中的特定图元进行操作
[VB&.NET]ppyyff 09:46:26
想起来了,我是用无痕方法实现的
无痕/ws 09:46:47
嗯,谢谢大家的建议,主要是我的图元筛选有二个循环,第一个遍历set,与第二个遍历set进行一一比较,符合条件的删除,所以前面方法还会存在问题
[ygy7170229][ygy7170229]one 09:48:40
还是不懂无痕你的问题,你描述的太少
[ygy7170229][ygy7170229]one 09:49:59
因为在删除图元的时候选择集的个数和索引都会发生混乱,从后往前遍历可以避免这个问题
无痕/ws 09:50:24
其实我的目的是去重,在屏幕上选择一组图元,过滤PL线,然后比较这些线的坐标,若是重合的,删除
[ygy7170229][ygy7170229]one 09:51:04
用两个选择集啊,用一个选择集不好弄
除非你记录handle
遍历两次,第一次比较第二次删除
无痕/ws 09:52:19
嗯,现在就是卡在第一个查找出来后,删除。。之后就报错了。哈
[ygy7170229][ygy7170229]one 09:52:57
这是必然的,你这样的逻辑本来就不对
轻舞飞扬 09:53:19
你这提取问题的水平也够可以的。第二个问题这种情况都能提取出第一个问题
[ygy7170229][ygy7170229]one 09:53:58
轻舞飞扬 09:56:00
for step-1
for each
比较
delete
exit for
next
next
[ygy7170229][ygy7170229]one 09:56:36
无痕/ws 09:58:49
for each
比较
delete
exit for
next
会有问题,delete后的选择集不再是原来的
轻舞飞扬 09:59:52
不用就算
无痕/ws 10:01:17
还是谢谢提出的方法
在路上26 10:02:20
我在用常青藤的时候,发现,打印的时候,如果有100多个图框,为封闭的多段线,(在20000个实体的情况下),他能很快的识别出来,我自己做,用从数据库中循环筛选的情况下,很慢啊,它用的什么方法啊,能很快筛选出封闭多段线
[ygy7170229][ygy7170229]one 10:03:36
图层,你把这些图框设置成单独图层
在路上26 10:05:35
我说的情况,是100多个图框,不再同一个图层
无痕/ws 10:05:45
同感,在选择集中刷选重合的多段线,一一比较顶点,重合线还存在起始点不同,方向不同的情况
无痕/ws 10:06:18
感觉很复杂,编了个VBA,超长呀
小学生 10:06:35
用过滤选择
轻舞飞扬 10:08:08
总有一致的特性供选择确定。颜色、图层、线型、线宽等等,看看有没有xdata
在路上26 10:08:19
第一步:过滤出多段线
第二部:挑选出封闭多段线,面积为A的
是这个步骤吗?
我也这么做过,感觉还是慢,不如他的快
[VB&.NET]ppyyff 10:09:46
现在计算机速度这快慢点就慢点吧
无痕/ws 10:10:13
我想这可能是查找方法的不同
轻舞飞扬 10:10:45
不编译的程序比编译程序慢
无痕/ws 10:10:52
我们一般是遍历,但软件公司好的是采用二分法
当然那个查找思路复杂得多
轻舞飞扬 10:11:12
二分个屁
在路上26 10:11:22
怎么二分?又不是数字
无痕/ws 10:12:47
将属性给数组再进行查,或用字典
在路上26 10:19:32
没明白
[ygy7170229][ygy7170229]one 10:19:58
方法很多,就看效率
在路上26 10:20:29
求高人指教 |