• IDL学习:语法基础-结构体


            结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“属性”(亦称之为“成员”),这些成员可以是变量、数组、字符串以及结构等类型数据。IDL中常用于函数返回值(PS:因为IDL中函数最多只能返回一个参数,因此当需要返回多个变量时,可以组合成一个变量作为返回值)。

            注:属性名必须的命名规范必须和变量命名一致,不能含有汉字

    1. >>Pig = Create_struct(['名字','weight'],'来福',200,Name='Pelosi')
    2. % CREATE_STRUCT: Illegal tag name: 名字.
    3. % Execution halted at: $MAIN$

            PS:我习惯matlab的用法,喜欢称之为“属性”,相对来说,“成员”更为贴切。

    1. 创建结构体

            IDL结构体包含两个结构体类型:命名结构体(署名结构体,typename)、匿名结构体。

    1.1 直接创建

    1.1.1 命名结构体

           创建结构体时用大括号“{}”, 命名结构体创建之时需要赋予结构体名称。

           创建格式:变量名={署名,属性1::值1,属性2:值2……}

    1. >> ; 之所以称之为命名结构体,是因为代码中有一个名称'Dog',name和weight是结构体中的属性,属性后面是对应的属性值,两者用“:”连接
    2. >>help,Pet ; 结构体Pet信息,名称DOG,2个成员变量(属性name、weight)及对应的属性值
    3. ** Structure DOG, 2 tags, length=32, data length=32:
    4. NAME STRING '来福'
    5. WEIGHT STRING '20Kg'
    6. >>Pet.NAME ; 查看属性name属性值
    7. 来福
    8. >>Pet.WEIGHT ; 查看属性weight的属性值
    9. 20Kg
    10. >>Pet = {Pig,name:'Pelosi',weight:'200Kg'} ; 例子2
    11. >>help,pet
    12. ** Structure PIG, 2 tags, length=32, data length=32:
    13. NAME STRING 'Pelosi'
    14. WEIGHT STRING '200Kg'

    1.1.2 匿名结构体

            与命名结构体相比,无需署名

            创建格式:变量名={署名,属性1::值1,属性2:值2……}

    1. >>Pig = {name:'Pelosi',weight:'200Kg'}
    2. >>help,Pig
    3. ** Structure <34b4c630>, 2 tags, length=32, data length=32, refs=1:
    4. NAME STRING 'Pelosi'
    5. WEIGHT STRING '200Kg'

            注:显示的时候,由于没有署名,所以显示的是存储的ID号。

    1.2 利用函数创建结构体

    1.2.1 Create_struct函数

            可以利用Create_struct()函数创建结构体。

            函数语法:

            Result = CREATE_STRUCT( [Tag1, Values1, ..., Tagn, Valuesn] [, Structuresn] [, NAME=string])

            Result = CREATE_STRUCT( [Tags, Values1, ..., Valuesn][, Structuresn] [, NAME=string])

            其中参数name表示署名,例如创建一个Pig结构体(命名结构体和匿名结构体),具有name和weight属性

    •  第1种函数用法创建结构体
    1. >>Pig = Create_struct('name','来福','weight','20Kg',Name='Pelosi') ; 命名
    2. >>help,Pig
    3. ** Structure PELOSI, 2 tags, length=32, data length=32:
    4. NAME STRING '来福'
    5. WEIGHT STRING '20Kg'
    6. >>Pig = Create_struct('name','来福','weight','20Kg') ; 匿名
    7. >>Pig
    8. {
    9. "NAME": "来福",
    10. "WEIGHT": "20Kg"
    11. }
    • 第2种函数用法创建结构体
    1. >>Pig = Create_struct(['name','weight'],'来福',200,Name='Pelosi')
    2. >>Pig
    3. {
    4. "NAME": "来福",
    5. "WEIGHT": " 200"

            此外,Create_struct()函数还可以在原有的基础上链接现有的结构体。

    1. >>Pig = Create_struct(['name','weight'],'来福',200,Name='Pelosi')
    2. >>Pet = Create_struct(Pig,'country','USA')
    3. >>help,Pig
    4. ** Structure PELOSI, 2 tags, length=32, data length=32:
    5. NAME STRING '来福'
    6. WEIGHT STRING ' 200'
    7. >>help,Pet
    8. ** Structure <374499a0>, 3 tags, length=48, data length=48, refs=1:
    9. NAME STRING '来福'
    10. WEIGHT STRING ' 200'
    11. COUNTRY STRING 'USA'

    1.2.2 Replicate函数

          也可以用Replicate()函数创建结构体,

    语法:

            Result = REPLICATE( Value, D1[, ..., D8] )

    1. >>Name = REPLICATE('Hlz', 5, 5)
    2. >>Name
    3. Hlz Hlz Hlz Hlz Hlz
    4. Hlz Hlz Hlz Hlz Hlz
    5. Hlz Hlz Hlz Hlz Hlz
    6. Hlz Hlz Hlz Hlz Hlz
    7. Hlz Hlz Hlz Hlz Hlz
    8. >>help,Name
    9. NAME STRING = Array[5, 5]
    10. >>Name = REPLICATE(Pig, 2, 2)
    11. >>Name
    12. [
    13. {
    14. "NAME": "来福",
    15. "WEIGHT": " 200"
    16. },
    17. {
    18. "NAME": "来福",
    19. "WEIGHT": " 200"
    20. },
    21. {
    22. "NAME": "来福",
    23. "WEIGHT": " 200"
    24. },
    25. {
    26. "NAME": "来福",
    27. "WEIGHT": " 200"
    28. }
    29. ]
    30. >>help,name
    31. NAME STRUCT = -> PELOSI Array[2, 2]

    2 结构体操作

    2.1 查看结构体

            可以利用help函数、N_Tags()函数、Tag_Name()函数查看相关信息;

    • help函数:查看结构体相关信息,最全显示
    • N_Tags()函数:查看结构体属性(成员)个数
    • Tag_Name()函数:显示结构体的属性名(成员名)
    • .Tname:显示变量类型
    • .typename:显示署名
    1. >>Pig = Create_struct(['name','weight'],'来福',200,Name='Pelosi')
    2. >>help,Pig
    3. ** Structure PELOSI, 2 tags, length=32, data length=32:
    4. NAME STRING '来福'
    5. WEIGHT STRING ' 200'
    6. >>Print,N_tags(Pig)
    7. >>Print,Tag_names(Pig)
    8. NAME WEIGHT
    9. >>Print,Pig.TNAME
    10. STRUCT
    11. >>Print,Pig.TYPENAME
    12. PELOSI

             可以利用“结构体.属性”或“结构体.(Tag_Index)”来查看属性值。

             注:Tag_Index 是一个表达式,其结果被视为一个标签位置(具体某一个数),为了让 IDL 解析器理解这种情况,您必须将 Tag_Index 括在括号中。 这不是数组索引操作,因此在此上下文中不允许使用方括号 [ ]。

    1. >>Pig = Create_struct(['name','weight','Country'],'来福',200,'USA',Name='Pelosi')
    2. >>Pig.name
    3. 来福
    4. >>Pig.(0)
    5. 来福
    6. >>Pig.(0:1)
    7. Pig.(0:1)
    8. ^
    9. % Syntax error.
    10. >>Pig.(0,1)
    11. Pig.(0,1)
    12. ^
    13. % Syntax error.

    2.2 修改结构体

            结构体一旦被创建,其属性(成员)变量的个数与类型将无法修改,赋值操作时结构体属性(成员)变量会自动类型转化。

    1. >>Pig = Create_struct(['name','weight'],'来福',200,Name='Pelosi')
    2. >>Pig
    3. {
    4. "NAME": "来福",
    5. "WEIGHT": 200
    6. }
    7. >>Pig.NAME = '老妖婆'
    8. >>Pig
    9. {
    10. "NAME": "老妖婆",
    11. "WEIGHT": 200
    12. >>Pig.NAME = 9
    13. >>Pig
    14. {
    15. "NAME": " 9",
    16. "WEIGHT": 200
    17. }
    18. >>Pig.NAME = Indgen(2)
    19. % Expression must be a scalar in this context:
    20. Array[2]>.
    21. % Execution halted at: $MAIN$

            分析:上述代码中,可以直接将原有的成员Name的值改为"老妖婆",但改为数字9的时候,自动变成字符串形式,改成数组类型的时候,程序报错。

    3.3 新增属性

            可以利用函数create_struct()新增属性(成员)。

    1. >>Pig = Create_struct(['name','weight'],'来福',200,Name='Pelosi')
    2. >>Pig2
    3. {
    4. "NAME": "来福",
    5. "WEIGHT": 200,
    6. "COUNTRY": "USA"

            也可以利用结构体继承来新增属性(成员)。

    1. >>Pig = Create_struct(['name','weight'],'来福',200,Name='Pelosi')
    2. >>Pig2 = {Caiyingwen, inherits Pelosi}
    3. >>Pig2
    4. {
    5. "NAME": "",
    6. "WEIGHT": 0
    7. }
    8. >>Pig3 = Pig
    9. >>Pig3
    10. {
    11. "NAME": "来福",
    12. "WEIGHT": 200

            不同于等号直接赋值,结构体“继承”只继承其属性(成员),为继承属性对应的值,相当于只赋值了表格的表头。

            可以在继承的基础上,新增属性。

    1. >>Pig = Create_struct(['name','weight'],'来福',200,Name='Pelosi')
    2. >>Pig4 = {Caiyingwen1, inherits Pelosi, Conntry:'中国台湾省'}
    3. >>pig4
    4. {
    5. "NAME": "",
    6. "WEIGHT": 0,
    7. "CONNTRY": "中国台湾省"

    3.3 删除属性

           水平有限,暂时未想到好的方法待以后补充。

    不足之处,敬请斧正!

    路漫漫其修远兮,吾将上下而求索

  • 相关阅读:
    echarts静态横向柱状图
    adjustText库解决深度学习、视觉模型matplotlib画散点图时由于标签非常多导致的重叠现象
    Arduino开发实例-DIY酒精浓度检测计
    使用win32 api读文件
    07 SpringMVC 拦截器
    6 种顶级加密方法 + 示例
    密码学概述
    如何实现广义的元交易(Meta Transaction)
    Mysql5.7 + 查询并解析json数据方法
    《向量数据库指南》——AutoGPT 宣布不再使用向量数据库
  • 原文地址:https://blog.csdn.net/weixin_41649786/article/details/126242637