1.創建結構體
(1) 命名結構體
創建具有兩個成員變量A、B的命名為str1的結構體
IDL> struct1={str1,a:1,b:2}
IDL> help,struct1,/structure
** Structure STR1, 2 tags, length=4, data length=4:
A INT 1
B INT 2
結構體struct1的基本信息:名稱為str1,成員變量為兩個:成員A整型變量值為1;成員B整型變量值為2
命名結構體支持結構體繼承,如
IDL> struct2={str2,inherits str1,c:3}
IDL> help,struct2,/str
** Structure STR2, 3 tags, length=6, data length=6:
A INT 0
B INT 0
C INT 3
可以用replicate函數創建結構體數組,調用方法如下
IDL> structs=replicate(struct2,10) IDL> help,structs STRUCTS STRUCT = -> STR2 Array[10]
(2) 匿名結構體
與創建命名結構類似,區別在於創建時不需要賦予結構體名
IDL> person={name:'jack',country:'USA',work:'Esri'}
IDL> help,person
** Structure <c9fa750>, 3 tags, length=48, data length=48, refs=1:
NAME STRING 'jack'
COUNTRY STRING 'USA'
WORK STRING 'Esri'
2.訪問結構體
IDL> print,person.name jack IDL> print,person.(0) jack
結構體一旦創建,其成員變兩個數與數據類型將無法修改,賦值操作時結構體成員變量會自動進行類型轉換,示例代碼如下
IDL> person.name=indgen(3) % Expression must be a scalar in this context: <STRING Array[3]>. % Execution halted at: $MAIN$ IDL> person.name=678 IDL> help,person.name <Expression> STRING = ' 678'
3.結構體操作函數
| 函數名 | 用途 |
| create_struct() | 根據給定名字和值創建結構體,並能連接結構體 |
| help,***,/Struct | 返回輸入結構體的相關信息 |
| n_tags | 返回結構體中的成員個數 |
| tag_names() | 返回結構體成員的名字 |
以結構體遍歷功能為例
pro traverse_struct ;初始化結構體 struct1={a:1,b:2,c:3,d:'a'} ;獲取成員變兩個數 tagnumber=n_tags(struct1) ;獲取成員名字 tagnames=tag_names(struct1) ;依次輸出成員變量 for i=0,tagnumber -1 do begin print,'Name:',tagnames[i],'value:',struct1.(i) endfor end
