结构

来自Shiyin's note
跳到导航 跳到搜索

修改结构的名称

  • sdssidl里面有一个rename_tags的程序(对结构数组也适用)
newstruct = rename_tags(struct, oldtagnames, newtagnames)


结构(数组)增加一个TAG

  • 结构很容易增加一个tag,比如
A= {tag1:0.,tag2:'Name'}
B=create_struct(A,'tag3',1L)

但是如果A是结构数组了,就不能再这样操作。

结果数组经常被用来读入数据文件,如果该数据文件加上一列数据,如何较方便的操作。

一种方法如下:
A= {tag1:0.,tag2:'Name'}
B= {tag1:1.,tag2:'Name2',tag3:10L}
A2=  replicate(A,10)
B2 = replicate(B,10)
struct_assign,A,B ;把A的数值付给B
print,B ;可以看到B的前两列已经变成A的数值,但B的第三列被充0,所以这时候可以再给B.tag3赋值。
还有一种方法,但没上面那么直观
str={a: 0l, b: }
str_arr=REPLICATE(str,10)
ref_str = reform_struct(str_arr, /tag_array, 10)
ref_str = create_struct(ref_str, 'c' ,make_array(10))
help, ref_str, /str
sdssidl中的add_tags程序
 tagnames=['ra', 'dec', 'image', 'name']
  values  =['0d', '0d',  'intarr(1000, 1000)', "'NGC3035'"]
  add_tags, oldstruct, tagnames, values
jadd_tag的程序(http://astro.berkeley.edu/~johnjohn/idl.html#JJADD_TAG)
IDL>  struct = {a: 0., b: 'blah'}
IDL> a=replicate(struct,2)
IDL> c=jjadd_tag(a,'new',0b)