32. 元胞数组
{23,'a',1:2:9,"hello"}; % 1×4 cell 数组,{[23]} {'a'} {[1 3 5 7 9]} {["hello"]}
cell(3,4); % 3×4 cell 数组
cellmat = {23,'a';1:2:9,"hello"};
% 2×2 cell 数组
% {[ 23]} {'a' }
% {[1 3 5 7 9]} {["hello"]}
cellrowvec = {23,'a',1:2:9,"hello"};
cellrowvec{2}; % 访问第二个元素 , 'a'
cellmat{2,1}; % 访问第2行1列元素, 1 3 5 7 9
cellmat{1,1} = 24; % 修改访问第1行1列元素
cell2 = cellrowvec(2); % 1×1 cell 数组,{'a'}
class(cell2); % 'cell'
cell2{1}; % 'a'
cell21 = cellmat(2,1); % 1×1 cell 数组,{[1 3 5 7 9]}
cell21{1}; % 1 3 5 7 9
cell21{1}(4); % 7
cellmat(1,:); % 1×2 cell 数组,{[23]} {'a'}
[c1,c2] = cellmat{1,:}; % c1 = 23 c2 = 'a'
size(cellmat); % 2 2
length(cellmat); % 2
cellrowvec(end); % 1×1 cell 数组,{["hello"]}
cellrowvec{end}; % "hello"
cellrowvec(2) = []; % 删掉一个,{[23]} {[1 3 5 7 9]} {["hello"]}
cellrowvec(2) = {}; % 错误,系统规定不能这样用
cellrowvec{2} = []; % 清空内容,{[23]} {0×0 double} {["hello"]}
cellrowvec{1} = {}; % 1×3 cell 数组, {0×0 cell} {0×0 double} {["hello"]}
cellmat(1,:) = []; % {[1 3 5 7 9]} {["hello"]}
length({'a','aa','aaa'}); % 3
strlength({'a','aa','aaa'}); % 1 2 3
string({'a','aa','aaa'}); % 1×3 string 数组,"a" "aa" "aaa"
cellstr(["a","b","c"]); % 1×3 cell 数组,{'a'} {'b'} {'c'}
cvnames_char = {'a','b','c'}; % {'a'} {'b'} {'c'}
strjoin(cvnames_char); % 连接函数,'a b c'
cvnames_char_join = strjoin(cvnames_char,'-'); % 'a-b-c'
strsplit(cvnames_char_join,'-'); % 切割函数,{'a'} {'b'} {'c'}
iscellstr(cvnames_char); % 判断是否元胞数组中均为字符,logical 1
cvnames_char_modified = [cvnames_char 123]; % {'a'} {'b'} {'c'} {[123]}
iscellstr(cvnames_char_modified); % logical 0
33. 结构体
package = struct('item_no',123,'cost',19.99,'price',39.95,'code','g');
% package =
% 包含以下字段的 struct:
% item_no: 123
% cost: 19.9900
% price: 39.9500
% code: 'g'
class(package); % 'struct'
package.item_no; % 获取值,123
nepack = package; % 复制结构体
newpack.price = 34.95; % 修改值
newpack = rmfield(newpack,'code'); % 删除字段
isstruct(package); % 判断是否是struct, 1
isfield(package,'code'); % 判断code是否为package中字段,1
fieldnames(package); % 返回所有字段名字
% 4×1 cell 数组
% {'item_no'}
% {'cost' }
% {'price' }
% {'code' }
34. 结构体数组
packages(1) = struct('item_no',123,'cost',19.99,'price',39.95,'code','g');
packages(2) = struct('item_no',456,'cost',19.99,'price',39.95,'code','g');
packages(3) = struct('item_no',789,'cost',19.99,'price',39.95,'code','g');
% packages =
% 包含以下字段的 1×3 struct 数组:
% item_no
% cost
% price
% code
packages(1).name = 'sturct_1'; % packages(1)添加新的字段name,则packages中其它均添加name字段,但没有初值
% 创建结构体数组方式2
packages(3) = struct('item_no',[],'cost',[],'price',[],'code',[]);
% fprintf('%f \n',packages(1).cost); fprintf('%f \n',packages(2).cost);
% fprintf('%f \n',packages(3).cost);
% 等价于下面一个
fprintf('%f \n',packages(1).cost,packages(2).cost,packages(3).cost);
% 等价于下面一个
fprintf('%f \n',packages.cost);
CostVec = [packages.cost]; % 19.9900 19.9900 19.9900
[packages.quantity] = deal(101,102,103);
[packages.cost] .* [packages.quantity];
% ans =
% 1.0e+03 *
% 2.0190 2.0390 2.0590
student(3) = struct('name','a,b','id_no',332,'quiz',[1,2,3,4]);
student(2) = struct('name','c','id_no',331,'quiz',[4,5,6,7]);
student(1) = struct('name','d','id_no',330,'quiz',[8,9,10,11]);
student(3).name; % 'a,b'
student(3).name(1); % 'a'
student(3).name(2); % ','
fprintf('%d \n',student(1).quiz);
lineseg = struct('endpoint1',struct('x',1,'y',2),'endpoint2',struct('x',3,'y',4));
35. 逗号分割列表
c = {2,'1'}; % {[2]} {'1'}
c{1:2}; % ans = 2 ans = '1',等价于 c{1},c{2}
[a,b] = c{1:2}; % a = 2 b = '1'
a1 = 1;
a2 = '2';
a3 = rand(3,2);
[b1,b2,b3] = a1,a2,a3; % 错误
[b1,b2,b3] = {a1,a2,a3}; % 分别复制
[b1,b2,b3] = deal(a1,a2,a3); % 分别复制方式2
plot(x,y1,'o-','LineWidth',3);
plot(x,y2,'o-','LineWidth',3);
plot(x,y3,'o-','LineWidth',3);
dec = {'o-','LineWidth',3};
plot(x,y1,dec{:});
plot(x,y2,dec{:});
plot(x,y3,dec{:});
C = cell(2,1);
[C{:}] = size(rand(3,2));
% C =
% 2×1 cell 数组
% {[3]}
% {[2]}
C = cell(4,1);
[C{:}] = size(rand(3,2))
% C =
% 4×1 cell 数组
% {[3]}
% {[2]}
% {[1]}
% {[1]}