2010-08-04 39 views
5

Tôi có thể thực hiện điều này theo cách sai, nhưng tôi đang cố xác định và điền các mảng trong vòng lặp.xác định tên mảng trong vòng lặp

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 

Điều này rõ ràng sẽ không hoạt động, nhưng có cách nào để sử dụng chuỗi được xác định bởi 'dòng' + strtrim (i, 2) để tạo và điền một mảng mới trên mỗi lần lặp không? Trong trường hợp này tôi sẽ có 40 mảng với tên line0 ... 39. Phần khó khăn ở đây là sz [1] thay đổi, vì vậy tôi không thể chỉ định nghĩa một mảng lớn để giữ mọi thứ.

Trả lời

2

Vâng, luôn có chức năng execute, nếu bạn đang ở trong tâm trạng bị hack bẩn thỉu (và không cần nó chạy trên một máy ảo chưa được cấp phép).

Nhưng bạn đã cân nhắc khai báo một mảng con trỏ 1-D, trong đó mỗi phần tử trỏ đến một trong 3 phần tử con của bạn bằng các mảng con sz? Điều đó mang lại cho bạn một số lợi ích của một mảng lớn, mà không có sự ràng buộc của tất cả các subarrays phải có cùng một hình dạng. Nó có thể giống như thế này ...

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

Trong IDL 8.0 hoặc sau này bạn có thể sử dụng HASH datatype cho việc này.

Mã của bạn sẽ trông như thế này:

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 

Bây giờ bạn có thể truy cập vào các mảng của bạn bằng tên:

line = array_dict['line01'] 
Các vấn đề liên quan