以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [讨论]我试了一下帮助文件--集合 中的例子,不太理解。  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=449)

--  作者:wcs
--  发布时间:2008/9/11 22:19:00
--  [讨论]我试了一下帮助文件--集合 中的例子,不太理解。
Dim Lst As New List(Of String()) \'定义一个字符型数组集合。
Dim Ary1(1) As String Dim Ary2(1) As String
Lst.Add(Ary1) \'将数组加到集合中。
Lst.Add(Ary2)
Ary1(0) = "a"
Ary1(1) = "b"
 Ary2(0) = "1"
 Ary2(1) = "2" \'注意循环变量是字符型数组,所以类型是String(),而不是String
For Each uu As String() In Lst
 For i As Integer = 0 To Ary1.Length - 1
 Output.Show(Ary2(i))
 Next
Next    ‘注意:我修改了一下帮助原文 for each 后面的几个变量,如“uu”、“ary1”、“ary2”

执行结果是:
1
2
1
2
这个结果表示:Ary2数组中的内容循环显示了两次,但是 “For i As Integer = 0 To Ary1.Length - 1”只定义了显示从0、1两个要素 不理解啊!
[此贴子已经被作者于2008-9-11 22:22:00编辑过]

--  作者:wcs
--  发布时间:2008/9/11 22:30:00
--  
说实话,我不知道编程时在什么地方可能会用上集合。

确实水平太有限了。
图片点击可在新窗口打开查看
--  作者:kylin
--  发布时间:2008/9/12 7:54:00
--  
注意以下的更改,其他不变
 For i As Integer = 0 To uu.Length - 1
 Output.Show(uu(i)) 
 
 

--  作者:wcs
--  发布时间:2008/9/12 8:32:00
--  

按 kylin 的意思修改一下,计算结果可以理解。

但为什么像一楼那样,其计算结果为:





我不能理解。

我学习过程中,我会改一下帮助文件例子中的一些变量,观察计算结果,以理解各种属性、方法的意义。


--  作者:狐狸爸爸
--  发布时间:2008/9/12 8:36:00
--  
输出的是Ary2的内容,结果是1和2
你改了变量名,后面引用该变量的地方也要改。
[此贴子已经被作者于2008-9-12 8:37:54编辑过]

--  作者:kylin
--  发布时间:2008/9/12 9:50:00
--  
在老六的基础上进一步说明
For Each uu As String() In Lst 这一句的目的是为了数组集合的每一个元素
 For i As Integer = 0 To Ary1.Length - 1  这一句从逻辑上应当是针对上一句的uu才可以
  Output.Show(Ary2(i))  这一句的意思是要求程序显示数组Ary2的内容,当然没有办法显示Ary1的内容。实际上所要的是uu中每一个元素中的每一个值即uu(i)

--  作者:wcs
--  发布时间:2008/9/12 10:07:00
--  
For i As Integer = 0 To Ary1.Length - 1
 Output.Show(Ary2(i))
 Next


我是这样理解的:For i As Integer = 0 To Ary1.Length - 1  表示 i取0、1 (ary1只有两个要素),  
        那么Output.Show(Ary2(i)) 也只应显示两个结果,而不是4个!

不理解结果为什么是4个。

在这个语句里,上面和下面的变量名必须一致吗?(ary1和ary2、uu)
[此贴子已经被作者于2008-9-12 10:08:11编辑过]

--  作者:kylin
--  发布时间:2008/9/12 11:16:00
--  
别忘了For Each uu As String() In Lst 是在你的For i As Integer = 0 To Ary1.Length - 1 之外圈,也是包含2个数组,也是循环两次。小学算式2*2=4

如你的需要只要2个的话,For Each uu As String() In Lst 与外圈的Next就变得没有意义了,大可以去掉。

上面和下面的变量名是否必须一致?看你的动作目标与逻辑了。
逻辑肯定是编码的基础,混乱了,到时候出现问题,很难改的。

--  作者:wcs
--  发布时间:2008/9/12 11:22:00
--  

是有点混了。

FOR each 要求遍历所有的内容(4个),但后面的只选择了ARY2(2个要素),  for next  中又按ARY1 取值。

不过,我是故意混着的,观察规律。

图片点击可在新窗口打开查看


--  作者:kylin
--  发布时间:2008/9/12 11:31:00
--  

原来是故意的!?

FOR each  要循环2次
For i  也要循环2次
过程大致描述一下:
FOR each  第一次,For i  从0-1循环了2次,也就是遍历ARY2所有内容(2个)
FOR each  第而次,For i  还是从0-1循环了2次,也就是重新遍历ARY2所有内容(2个)
一共遍历2次ARY2所有内容(即4个)

能明白?没有“混”吧。