Mik*_*ike 5 variables loops idl-programming-language
我可能会以错误的方式解决这个问题,但我正在尝试在循环中定义和填充数组.
for i = 0,39 do begin
xx = long(findgen(n+1l)*sx + line1x[i])
sz = size(xx)
arrayname = 'line' + strtrim(i,2)
arrayname = findgen(3,sz[1])
arrayname[0,*] = xx
arrayname[1,*] = yy
arrayname[2,*] = vertline
endfor
Run Code Online (Sandbox Code Playgroud)
这显然不起作用,但有没有办法使用'line'+ strtrim(i,2)定义的字符串在每次迭代时创建并填充一个新数组?在这种情况下,我有40个名为line0 ... 39的数组.这里的困难部分是sz [1]变化,所以我不能简单地定义一个大数组来保存所有东西.
execute好吧,如果您想进行肮脏的黑客攻击(并且不需要它在未经许可的虚拟机安装上运行),那么该功能总是有的。
但是您是否考虑过声明一个一维指针数组,其中每个元素都指向 3 个 by sz 子数组之一?这为您提供了一个大数组的一些好处,而不受所有子数组必须具有相同形状的限制。它可能看起来像这样......
ptrs=ptrarray(40) ; Allocate an array of 40 pointers, initialized to null
for i = 0,39 do begin
; calculate sz, xx, yy, vertline
dummy=findgen(3,sz[1])
dummy[0,*] = xx
dummy[1,*] = yy
dummy[2,*] = vertline
ptrs[i]=ptr_new(dummy) ; create copy of dummy on the heap, storing pointer in ptrs[i]
endfor
; To access the i-th subarray...
(*ptrs[i])[0,*] = new_xx
(*ptrs[i])[1,*] = new_yy
(*ptrs[i])[2,*] = new_vertline
Run Code Online (Sandbox Code Playgroud)