当前位置: 首页 > news >正文

MATLAB中getfield函数用法

目录

语法

说明

示例

访问标量结构体的字段

嵌套结构体的字段

结构体数组元素的字段

嵌套结构体数组的索引

字段的元素


        getfield函数的功能是结构体数组字段。

语法

value = getfield(S,field)
value = getfield(S,field1,...,fieldN)
value = getfield(S,idx,field1,...,fieldN)
value = getfield(S,idx,field1,idx1,...,fieldN,idxN)

说明

value = getfield(S,field) 返回结构体 S 的指定字段中的值。例如,如果 S.a = 1,则 getfield(S,'a') 返回 1。

        作为 getfield 的替代方法,请使用圆点表示法,即 value = S.field。圆点表示法通常更高效。

        如果 S 是非标量,则 getfield 返回数组第一个元素中的值,相当于 S(1).field。

value = getfield(S,field1,...,fieldN) 返回存储在嵌套结构体中的值。例如,如果 S.a.b.c = 1,则 getfield(S,'a','b','c') 返回 1。

value = getfield(S,idx,field1,...,fieldN) 指定结构体数组的元素。例如,如果 S(3,4).a = 1,则 getfield(S,{3,4},'a') 返回 1。

value = getfield(S,idx,field1,idx1,...,fieldN,idxN) 指定字段的元素。例如,如果 S.a(2) = 1,则 getfield(S,'a',{2}) 返回 1。同样,如果 S(3,4).a(2).b = 1,则 getfield(S,{3,4},'a',{2},'b') 返回 1。

示例

访问标量结构体的字段

        从 what 函数返回的结构体中获取字段的值。what 函数返回一个标量结构体,其中的字段包含指定文件夹的路径以及该文件夹中各种文件的名称。

S = what('C:\Temp')
S = struct with fields:
        path: 'C:\Temp'
           m: {'testFunc1.m'}
       mlapp: {0×1 cell}
         mlx: {'testFunc2.mlx'}
         mat: {2×1 cell}
         mex: {0×1 cell}
         mdl: {0×1 cell}
         slx: {0×1 cell}
           p: {0×1 cell}
     classes: {0×1 cell}
    packages: {0×1 cell}

        返回 mlx 字段中列出的所有实时脚本的名称。使用 getfield 函数时,可以访问某函数返回的结构体的字段,而无需使用临时变量来保存该结构体。

value = getfield(what('C:\Temp'),'mlx')
value = 1×1 cell array
    {'testFunc2.mlx'}

        也可以使用圆点表示法访问字段。

value = S.mlx
value = 1×1 cell array
    {'testFunc2.mlx'}

嵌套结构体的字段

        访问嵌套结构体的字段。在嵌套结构体中,在任何级别的结构体都可以包含本身是结构体的字段以及不是结构体的其他字段。

        首先,创建一个嵌套结构体。

S.a.b.c = 1;
S.a.b.d = 'two';
S.a.b.e = struct('f',[3 4],'g','five');
S.h = 50
S = struct with fields:
    a: [1x1 struct]
    h: 50

        虽然 S 是结构体,但字段 S.a、S.a.b 和 S.a.b.e 也是结构体。

S.a
ans = struct with fields:
    b: [1x1 struct]

S.a.b
ans = struct with fields:
    c: 1
    d: 'two'
    e: [1x1 struct]

S.a.b.e
ans = struct with fields:
    f: [3 4]
    g: 'five'

        使用 getfield 函数返回 S.a.b.d 的值。指定以逗号分隔的嵌套结构体名称列表时,必须在顶层结构体和指定的字段名称之间的每个级别包含这些结构体。在本例中,以逗号分隔的结构体名称列表为 'a','b',字段名称为 'd'。

value = getfield(S,'a','b','d')
value = 
'two'

        也可以使用圆点表示法来访问同一字段。

value = S.a.b.d
value = 
'two'

结构体数组元素的字段

        从 dir 函数返回的结构体数组的元素中获取字段的值。dir 函数返回一个结构体数组,其中的每个元素都包含有关指定文件夹中一个文件的信息。

        返回有关文件夹 C:\Temp 中文件的信息。该文件夹中有 5 个文件。

S = dir('C:\Temp')
S = 5×1 struct array with fields:
    name
    folder
    date
    bytes
    isdir
    datenum

        要显示有关第 5 个文件的信息,请对 S 进行索引。

S(5)
ans = struct with fields:
       name: 'testFunc2.mlx'
     folder: 'C:\Temp'
       date: '19-Jul-2018 09:43:53'
      bytes: 2385
      isdir: 0
    datenum: 7.3726e+05

        使用 getfield 函数返回 S 的第 5 个元素描述的文件的名称。使用 getfield 时,请在元胞数组中指定索引。

value = getfield(S,{5},'name')
value = 
'testFunc2.mlx'

        作为替代方案,请对结构体数组进行索引,然后使用圆点表示法指定字段。

value = S(5).name
value = 
'testFunc2.mlx'

嵌套结构体数组的索引

        访问嵌套结构体的字段,其中某些层级上的结构体是结构体数组。在此示例中,S 是一个 1×2 结构体数组。第二个元素 S(2) 具有嵌套结构体 a.b,其中 b 是一个 1×3 结构体数组。

        首先,创建一个嵌套结构体。使用圆点表示法创建结构体后,使用 struct 函数创建另一个非标量结构体数组,并将其添加为字段。

S.a = 1;
S(2).a.b = struct('d',{5,10,20});
S
S=1×2 struct array with fields:
    a

S(2).a.b
ans=1×3 struct array with fields:
    d

        使用 getfield 函数从 b 的第三个元素返回 d 的值。您必须使用元胞数组同时指定 S 和 b 的索引。

value = getfield(S,{2},'a','b',{3},'d')
value = 20

        也可以使用圆点表示法来访问同一字段。

value = S(2).a.b(3).d
value = 20

字段的元素

        创建一个结构体,其中一个字段的值为数组。

S.a = [5 10 15 20 25]
S = struct with fields:
    a: [5 10 15 20 25]

        使用 getfield 函数返回该数组的元素。要返回一个子数组,请在字段名称后面指定索引。您必须在元胞数组内指定索引。

value = getfield(S,'a',{[2:4]})
value = 1×3

    10    15    20

        也可以使用圆点表示法和数组索引来访问相同的元素。

value = S.a(2:4)
value = 1×3

    10    15    20

相关文章:

  • [GESP202503 C++一级题解]:B4257:图书馆里的老鼠
  • 聚焦交易能力提升!EagleTrader 模拟交易系统打造交易成长新路径
  • Mac: 运行python读取CSV出现 permissionError
  • ARCGIS PRO SDK VB2022 图层要素类类型判断
  • 【RocketMQRocketMQ Dashbord】Springboot整合RocketMQ
  • 大模型 API 调用中的流式输出与非流式输出全面对比:原理、场景与最佳实践
  • 【web应用安全】关于web应用安全的几个主要问题的思考
  • 【Uni-App】嵌入悬浮球全局组件的详细教程和防踩坑点
  • 高校动作捕捉实训室:赋能高校高水平动画专业人才培养
  • Postman 如何发送 Post 请求上传文件? 全面指南
  • 微信小程序云开发-云函数lookup联合查询返回数组为空-解决方法
  • Linux\CentOS解决OpenSSH和Nginx安全漏洞
  • APNS和FCM推送服务脚本
  • Kubernetes》k8s》Containerd ctr cri
  • DPO介绍+公式推理
  • ngx_http_core_init_main_conf
  • 将任何网站变成独立的桌面应用 开源免费 Tuboshu
  • 3.使用epoll实现单线程并发服务器
  • JavaWeb——事务管理、AOP
  • windows USB 了解
  • 乌前总统亚努科维奇前顾问在西班牙遭枪击死亡
  • 东方妍美递表港交所:去年亏损近七千万,“童颜针”核心产品尚未获批
  • 已婚女子谎称单身恋爱2年多,骗取男友38.8万元彩礼被刑拘
  • 中国—东盟经贸部长特别会议就支持多边贸易体制等达成重要共识
  • 牛市早报|央行:加力支持提振消费、稳定外贸等领域,用好用足存量增量政策
  • 小马智行一季度营收增12%:Robotaxi收入增长两倍,预计车队规模年底到千台