Foxtable(狐表)用户栏目专家坐堂 → [求助]集合的长度为什么会变化


  共有4029人关注过本帖树形打印复制链接

主题:[求助]集合的长度为什么会变化

帅哥哟,离线,有人找我吗?
chnfo
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
[求助]集合的长度为什么会变化  发帖心情 Post By:2020/1/15 16:48:00 [只看该作者]

定义了一个集合变量A,然后把这个变量赋给B
在运行过程中,当B的集合元素变化时,集合A的元素也变了,这是为什么?
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:集合问题.zip


 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110728 积分:563560 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/15 16:58:00 [只看该作者]

正常。集合属于引用对象,变量引用的是对象的内存地址,集合变量A赋给B,A和B引用的都是同一个对象的内存地址

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2020/1/15 17:20:00 [只看该作者]

问题是我要用源集合变量A去做一些判断,如果它要随副本B动态变化,那岂不是就搞不成了?

可以运行自定义函数(项目中只有一个自定义函数),里面我写了注释。

总不能在每一次遍历的时候,再把源集合变量A计算一次吧

例如源集合变量X=datatables("A").getvalues("ID","Temp = 1")

然后遍历时
dim y as new  list(of string) 
for each dr as datarow in datatables("B").datarows
y = x 
if *** then 
y.remove(dr("BID"))  '----结果是y移除了某一个无素,X也同时移除了,这个有点问题吧,我的理解,y只是一个副本,它移除了某个元素Z,但X应当还有这个元素Z啊
end if 
next
[此贴子已经被作者于2020/1/15 17:26:31编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110728 积分:563560 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/1/15 17:33:00 [只看该作者]

什么是对象引用,什么是值引用?百度学习一下。

那就不要直接赋值,新建一个集合,和A集合的项目给B集合

Dim y As new  List(of String)
y.Add("1")
y.Add("2")
Dim x As new  List(of String)
x.AddRange(y)
x.Remove("1")

For Each s As String In y
    Output.Show(s)
Next
Output.Show("*********")
For Each s As String In x
    Output.Show(s)
Next

 回到顶部
帅哥哟,离线,有人找我吗?
chnfo
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:九尾狐 帖子:2243 积分:18477 威望:0 精华:0 注册:2011/11/26 20:21:00
  发帖心情 Post By:2020/1/15 17:47:00 [只看该作者]

原来如彼,刚刚还看了这节帮助,还以为赋值即可

 回到顶部