matlab 结构体struct函数使用方法

1.struct函数直接定义

查阅文档是这样的:struct(field1,value1,field2,value2,.....

上面这个格式很重要记住

field1和field2称为这个结构体的字段,要熟悉字段这个词语。

注意:这里先提一句 matlab中的文档显示Any nonscalar cell arrays in the set value1,...,valueN must have the same dimensions.

意思是 任何非标量元胞数组必须尺寸相同,后面会需要用到

目录

1.struct函数直接定义

查阅文档是这样的:struct(field1,value1,field2,value2,.....)

1.1 先举例正常的:s = struct('f1','name','f2','blue')

1.2 如果f2变成普通数组呢?

1.3 这里复习一下元胞数组

1.4 再变化,如果其中一个字段比如f2变成元胞数组即cell型数组呢?

情况一:存在一个value内容为n个元素的元胞数组,不管是1×n还是n×1,只要行数或者列数不超过2

情况二:value中全部是元胞数组

2 结束语



1.1 先举例正常的:s = struct'f1','name','f2','blue')

所以创造了一个s结构体,这个s结构体包括两个字段,一个字段是一种内容。此时可以看到这个结构体大小是1×1,原因是这里面每个字段的大小是1×1


1.2 如果f2变成普通数组呢?

结果如下图


1.3 这里复习一下元胞数组

防止有人忘记或者小白看不懂(当然我也是小白233333),具体见我上篇博客

元胞数组(cell)创建及赋值:

cell(n),创造n×n大小的数组

从这里能看到两种括号的应用区别了吗?当用{ }时,代表直接写值,用()定位时,赋值就必须在内容外层再套一层{ }

举例:a = {'NAME',[1 2 3;2 4 6],ones(2,3),{'color',[1 2]}}

用逗号 “”做间隔 

根据上图里第4个框内内容可知,cell内可以再次赋值一个cell型数组的


1.4 再变化,如果其中一个字段比如f2变成元胞数组即cell型数组呢?

举例

s = struct('f1','name','f2',{[1 2 3;2 4 6],'color',ones(2,2)})

将f2的内容变成了一个大小为1×3的元胞数组,此时观察结构体内容值

会发现字段变成了3,对比前面字段是每个field的名字而不同,那么这种不同是为什么呢?

没有为什么哈哈哈,规则就是这样的,当存在元胞数组时,那么有两种情况

  • 情况一:存在一个value内容为n个元素的元胞数组,不管是1×n还是n×1,只要行数或者列数不超过2

那么字段会变成n大小,同时结构体数组大小为元胞数组大小,就像上面例子f1也会像f2一样变成1×3,但是f1只有一个,怎么办呢,就会默认全部填充这一个,填充成和元胞数组一样大小的

  • 情况二:value中全部是元胞数组

一开头我介绍的那句文档中翻译出来的话,全部是元胞数组的话,必须尺寸相同才可以

不然就会出现,比如我把f1位置改成两个元素的元胞数组

s = struct('f1',{'name',[2 3 4]'},'f2',{[1 2 3,2 4 6],'color',ones(2,2),'laa'})


2 结束语

至此struct函数讲解结束,还是非常简单的,如果理解不清楚一定要亲自把代码自己在matlab上输一遍运行看结果,尝试了就知道啦!!

不要偷懒哦!!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章