元胞数组
元胞数组就是一种特殊的数据类型,组成元胞数组的元素可以是任意一种数据类型,就相当于它是一个书包一样,里面装着各种各样的东西。数据类型可以是字符串、双精度数、稀疏矩阵、元胞数组、结构体等其他MATLAB的数据类型。它每一个元胞数据可以是标量、向量、N维数组,每一个可以具有不同的尺寸和空间,每一个元素叫做一个元胞。称这些元胞组合起来的数组为元胞数组。
元胞数组的创建
元胞数组常见的两种创建方法,一是用花括号{}来直接创建
yuanbao={'hello','你好!','what are you doing?'}
二是用cell函数来创建,cell(m,n)生成一个m行n列的空的元胞数组
A=cell(1,3)
然后我们在给里面每个位置赋值
A{1}='hello';
A{2}='你好!';
A{3}='what are you doing?';
常用的函数
yuanbao={'hello','你好!','what are you doing?'}, %创建字符串元胞数组
A=cell(1,3) %创建一个空的元胞数组,在给里面赋值
A{1}='hello';
A{2}='你好!';
A{3}='what are you doing?';
iscellstr(yuanbao) %判断改变量是否为字符串元胞数组
yuanbao1=strjoin(yuanbao,'-') %字符串用‘-’连接
yuanbao2=strsplit(yuanbao1,'-') %还原,去掉‘-’
yuanbao3=[yuanbao [1 2 3;4 5 6;7 8 9]] %添加一个double数组
元胞数组的引用(访问)
元胞数组的引用类似矩阵的引用,只不过元胞数组相当于有两层,
A=cell(1,3) %创建一个空的元胞数组,在给里面赋值
A{1}='hello';A{2}='你好!';A{3}='what are you doing?';
A=[A [1 2 3;4 5 6;7 8 9]] %添加一个double数组
A(1) %访问第一个元胞
A{1} %第一个元胞里面的所有元素
A{1}(2) %第一个元胞里面所有元素中的第二个元素
A{4}(2,3) %第四个元胞里面所有元素的第2行3列位置的元素
注意:这里如果元胞数组A是一个
m
×
n
m\times n
m×n的数组,那么你使用A(ind)去索引的话,它是线性索引,所以建议大家用A(a,b)形式去索引。
A(1) %访问第一个元胞
A{1} %第一个元胞里面的所有元素
A{1}(2) %第一个元胞里面所有元素中的第二个元素
A{4}(2,3) %第四个元胞里面所有元素的第2行3列位置的元素
结构体
结构体就是把不同数据类型的变量放到同一个变量名下,通过不同的"域"的概念对结构体中的数据进行赋值,操作等。
结构体的创建
结构体的创建常见的有两种方法,一是
s = struct(field1,value1,...,fieldN,valueN)
其中field是字段,value是值
例如创建一个学生的信息,有三个字段分别是:学号、姓名、性别。
值分别是:2019001、A、nan。
第二种是先写变量名+字段
student.xuehao=2019001
student.xingming='A'
结构体的引用(访问)
结构体的引用就是变量名.字段
student.xingming
注意:中间连接一定是用点(.)
%% 访问:变量名.字段
%student.xingming
%student.xingming='B' %怎样改变值
%rmfield(student,'xingming') %删除字段
%isstruct(student) %判断是否是结构体
%isstruct({[1 2 3 4]}) %判断是否有[1 2 3 4]
%isfield(student,'xingming') %判断是否含有改字段
%fieldnames(student) %返回一个cell类型,查看字段
结构体的例子
有一个商品A,成本是10元,买出价格是15.6元,写一个函数求利润。
%% 有一个商品A,成本是10元,买出价格是15.6元,写一个函数求利润。
function li_run=lr(shang_p)
li_run=shang_p.price-shang_p.cheng_b;
end
shang_p=struct('ming_c','A','cheng_b',10,'price',15.6);
lr(shang_p)
结果如下:
结构体数组
假设我们要创建下表的结构体应该怎么写呢
商品 | 成本 | 价格 | 商品编号 |
---|---|---|---|
A | 17.9 | 28 | w |
B | 15.8 | 23.6 | p |
C | 12.3 | 21 | g |
直接看代码吧
shang_p(1)=struct('ming_c','A','cheng_b',17.9,'price',28,'biang_h','w')
shang_p(2)=struct('ming_c','B','cheng_b',18.8,'price',23.6,'biang_h','p')
shang_p(3)=struct('ming_c','C','cheng_b',12.3,'price',21,'biang_h','g')
结果如下
如果我们在加一个字段:产地
shang_p(1).chandi='beijing' %增加一个字段产地