2010-08-04 10 views
5

Ich mag dies in die falsche Richtung gehen, aber ich versuche, Arrays innerhalb einer Schleife zu definieren und zu füllen.define Array-Name innerhalb einer Schleife

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 

Dies wird sich natürlich nicht funktionieren, aber ist es eine Möglichkeit, die Zeichenfolge von ‚Linie‘ definiert verwenden + strtrim (i, 2) zu schaffen und ein neues Array bei jeder Iteration zu füllen? In diesem Fall hätte ich 40 Arrays mit den Namen line0 ... 39. Der schwierige Teil hier ist, dass sz [1] variiert, so dass ich nicht einfach ein großes Array definieren kann, um alles zu halten.

Antwort

2

Nun, es gibt immer die execute Funktion, wenn Sie in der Stimmung für einen schmutzigen Hack (und brauchen es nicht auf einer nicht lizenzierten virtuellen Maschine Installation).

Aber haben Sie darüber nachgedacht, ein 1-D Array von Zeigern zu deklarieren, in dem jedes Element auf eines Ihrer 3 by sz-Subarrays zeigt? Das gibt Ihnen den Vorteil eines großen Arrays, , ohne die Einschränkung, dass alle Subarrays die gleiche Form haben müssen. Es könnte etwa so aussehen ...

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 
3

In IDL 8.0 oder höher können Sie den HASH Datentyp für diese.

Ihr Code würde wie folgt aussieht:

array_dict = hash() 
for ii = 0,39 do begin 
    xx = long(findgen(n+1l)*sx + line1x[ii]) 
    sz = size(xx) 
    arrayname = 'line' + string(1, FORMAT='(i02)') 
    array = findgen(3,sz[1]) 
    array[0,*] = xx 
    array[1,*] = yy 
    array[2,*] = vertline 

    array_dict[arrayname] = array 
endfor 

Sie jetzt Ihre Arrays mit Namen zugreifen können:

line = array_dict['line01'] 
Verwandte Themen