【问题标题】:Looping through arrays of different sizes循环遍历不同大小的数组
【发布时间】:2015-02-22 03:15:45
【问题描述】:

嗨,我有让 imagen 3 个数组

ArrayA = {1,2,3}
ArrayB = {4,5,6,7}
ArrayC = {8,9,10,11,12}

我想循环这些但按如下顺序进行

打印 ArrayA,B,C 的第一个值
打印 ArrayA,b,C 第二个值
打印 ArrayA,B,C 第三个值
打印 ArrayA,b,C 第四个值
... ... ...

所以它会输出

1,4,8
2,5,9
3,6,10

此时数组 A 需要环绕,因此下一个输出将是

1,7,11
2,4,12
... ...

如果10个项目大小相同的数组我可以做

x = 0 到 9
打印 ArrayA{x}
打印 ArrayB(x)
打印 ArrayC(x)
下一个

但是对于不同长度的数组,我仍然可以将它们放在同一个循环中吗?我想我可以在每次循环运行时递增的数组中放置一个计数,例如

x=x+1 如果 x > 数组最大值则 x = 0

但它可以以更有效的方式完成吗?

我正在考虑在 perl 中执行此操作,并且我知道上面的代码与 perl 完全不同,因此实际代码如下,但目前我正在使用 VBA。

stars 是一个 199 维数组,该数组中的每个项目都是一个 720 长和 3 宽的二维数组。 SO stars(individual star)(轨道上的点,x坐标,y坐标)

所以 star(1) 包含具有 0.5 度分辨率的恒星轨道的 x,y 坐标的数组。但有些需要具有不同的分辨率,因此尺寸会有所不同。但我仍然希望能够不断地循环遍历它们并根据需要环绕每个数组。

For h = 0 To 720
'Application.ScreenUpdating = False
For st = 0 To 199
Cells(st + 10, 2).Value = stars(st)(h, 1)
Cells(st + 10, 3).Value = stars(st)(h, 2)

Next

'calls chart to update
'Application.ScreenUpdating = True
DoEvents

Next

干杯

【问题讨论】:

    标签: arrays vba loops


    【解决方案1】:

    如果你想环绕,你可以使用'mod',如'index mod size'

    [附录 - FreeBasic 示例]

    const aSize=5
    const bSize=3
    dim a(0 to aSize-1) as integer
    dim b(0 to bSize-1) as integer
    
    a(0)=0
    a(1)=1
    a(2)=2
    a(3)=3
    a(4)=4
    
    b(0)=0
    b(1)=10
    b(2)=20
    
    for i=0 to 20
      print "[";a(i mod aSize);" ";b(i mod bSize);"]"
    next
    
    sleep
    

    【讨论】:

    • 抱歉,您能否对此进行扩展或链接一些文档?
    • 是的,这里有一些 freebasic 代码作为示例: const aSize=5 const bSize=3 dim a(0 to aSize-1) as integer dim b(0 to bSize-1) as integer a(0 )=0 a(1)=1 a(2)=2 a(3)=3 a(4)=4 b(0)=0 b(1)=10 b(2)=20 对于 i=0 到20 print "[";a(i mod aSize);" ";b(i mod bSize);"]" 下一次睡眠
    • 我认为这很完美 :),我仍在 perl 中寻找相同的功能,但肯定它一定在某个地方。
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 2013-11-06
    • 2021-10-08
    相关资源
    最近更新 更多