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'
人就像是被蒙着眼推磨的驴子,生活就像一条鞭子;当鞭子抽到你背上时,你就只能一直往前走,虽然连你也不知道要走到什么时候为止,便一直这么坚持着。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具