matlab中数据结构之-structure

  数据结构是将有逻辑联系的结构中称为域的值组合成一群。结构的优势是域是被命名了的,可以使结构中存储的数据更加清晰。结构变量不是数组,他们没有索引,不能像vector那样通过循环获取结构的值。

1.创建结构变量,使用struct函数,此处假设电脑超市存储他们的销售信息,包括item_no,cost,customer, code等,因此,每一个结构变量都有四个域,必须使用域名访问其中存储的值

复制代码
package = struct('item_no', 123, 'cost', 19.99, 'price', 39.95, 'code', 'g')
结果:package = 
  struct with fields:

    item_no: 123
       cost: 19.9900
      price: 39.9500
       code: 'g'
>> class(package)
类型:ans =
    'struct'
复制代码

由于matlab以矩阵为基本单位,大小

size(package)
ans =
     1     1

2.修改结构变量,使用‘.'运算符

复制代码
准备数据:newpack = package;
>> newpack.item_no = 111
newpack = 
  struct with fields:

    item_no: 111
       cost: 19.9900
      price: 39.9500
       code: 'g'
>> newpack.cost = 5.99; newpack.code='f';
>> newpack
ans = 
  struct with fields:

    item_no: 111
       cost: 5.9900
      price: 39.9500
       code: 'f'
复制代码

3.打印输出结构,使用disp函数,rmfield函数删除域

复制代码
disp(package)
    item_no: 123
       cost: 19.9900
      price: 39.9500
       code: 'g'
>> rmfield(package, 'code')
ans = 
  struct with fields:

    item_no: 123
       cost: 19.9900
      price: 39.9500
>> newpack
newpack = 
  struct with fields:

    item_no: 111
       cost: 5.9900
      price: 39.9500
       code: 'f'
复制代码

4.使用struct作为函数的参数:

function [profit] = calcprof(packstruct)
%CALCPROF calculates the profit for a software package
%Format:calcprof(stucture w/ price & cost fields)
profit = packstruct.price - packstruct.cost;

end

调用函数:

复制代码
>> package
package = 
  struct with fields:

    item_no: 123
       cost: 19.9900
      price: 39.9500
       code: 'g'
>>calcprof(package)
ans =
   19.9600
复制代码

也可以分开,传递两个参数,

复制代码
function [profit] = calcprofII(price, cost)
%CALCPROF calculates the profit for a software package
%Format:calcprof(price, cost)
profit = price - cost;

end

调用:calcprofII(package.price, package.cost)
ans =
   19.9600
复制代码

5.结构相关的函数,

  istruct(), 是否是结构

  isfield(), 是否为域

  fieldnames() 返回域的列表,用cell array

复制代码
>> isstruct(package)
ans =
  logical
   1
>> isfield(package, 'price')
ans =
  logical
   1
>> packFields=fieldnames(package)
packFields =
  4×1 cell array
    {'item_no'}
    {'cost'   }
    {'price'  }
    {'code'   }
>> packFileds{2}
Undefined variable packFileds. 
matlab2021中的超强智能纠错:Did you mean:
>> packFields{2}
ans =
    'cost'
复制代码

6.向量结构

复制代码
>> IN='item_no'
IN =
    'item_no'
>> CT='cost'
CT =
    'cost'
>> PE='peice'
PE =
    'peice'
>> CE='code'
CE =
    'code'
>> invec=[123 456 587]
invec =
   123   456   587
>> ctvec=[19.99 5.99 11.11]
ctvec =
   19.9900    5.9900   11.1100
>> pevec=[39.95 49.99 33.33]
pevec =
   39.9500   49.9900   33.3300
>> cevec=['g' 'l' 'w']
cevec =
    'glw'
>> for i = 1:3
packages(i)=struct(IN, invec(i), CT, ctvec(i), PE, pevec(i), CE, cevec(i));
end
>> packages(1)
ans = 
  struct with fields:

    item_no: 123
       cost: 19.9900
      peice: 39.9500
       code: 'g'
>> packages(2)
ans = 
  struct with fields:

    item_no: 456
       cost: 5.9900
      peice: 49.9900
       code: 'l'
>> packages(3)
ans = 
  struct with fields:

    item_no: 587
       cost: 11.1100
      peice: 33.3300
       code: 'w'
复制代码

也可以先创建一个空的结构向量,然后完成赋值操作:

复制代码
>> packagess(3) = struct('item_no', [], 'cost', [], 'price', [], 'code', [])
packagess = 
  1×3 struct array with fields:
    item_no
    cost
    price
    code
>> for i = 1:3
packagess(i)=struct('item_no', invec(i), 'cost', ctvec(i), 'price', pevec(i), 'code', cevec(i));
end
>> packagess(1)
ans = 
  struct with fields:

    item_no: 123
       cost: 19.9900
      price: 39.9500
       code: 'g'
>> packagess(2)
ans = 
  struct with fields:

    item_no: 456
       cost: 5.9900
      price: 49.9900
       code: 'l'
>> packagess(3)
ans = 
  struct with fields:

    item_no: 587
       cost: 11.1100
      price: 33.3300
       code: 'w'
复制代码

 

posted @   叕叒双又  阅读(981)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示