MATLAB程序设计详细记录_第八章

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}; % 访问第21列元素, 1 3 5 7 9
cellmat{1,1} = 24; % 修改访问第11列元素
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]}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值