在 MATLAB 编程中,元胞数组(Cell Array)是一种灵活的数据结构,允许存储不同类型的数据,如数值、字符串、结构体,甚至是其他元胞数组。本文将通过一个具体的代码示例,带你了解元胞数组的操作及其输出结果。
clear
clc
y.a = 1;
y.b = [1:3, 4:6]; % y.b = [1, 2, 3, 4, 5, 6]
B{1,1} = 1;
B{1,2} = 'Brenden';
B{2,1} = y;
B{2,2} = {12,34,2; 54,21,3; 4,23,67};
size(B)
ndims(B)
disp(B(2))
disp(B(3))
disp(B(4))
i = input('i=?');
if i == 0
B(3) = [];
disp(B)
else
B{3} = [];
disp(B)
end
代码解析
1. 创建结构体与元胞数组
首先,代码创建了一个包含两个字段的结构体 y
,并将其与其他类型的数据存储到元胞数组 B
中。元胞数组的优势在于其可以存储不同类型和大小的数据单元。
y.a = 1
:y
的第一个字段a
为数值 1。y.b = [1,2,3,4,5,6]
:y
的第二个字段b
是一个包含 6 个元素的向量。B{1,1} = 1
:B
的第一个单元存储数值 1。B{1,2} = 'Brenden'
:B
的第二个单元存储字符串'Brenden'
。B{2,1} = y
:B
的第三个单元存储结构体y
。B{2,2} = {12,34,2; 54,21,3; 4,23,67}
:B
的第四个单元是一个 3x3 的元胞数组。
2. 尺寸与维数
size(B) % 输出 B 的尺寸
ndims(B) % 输出 B 的维数
size(B)
返回B
的尺寸[2, 2]
,说明B
是一个 2 行 2 列的元胞数组。ndims(B)
返回B
的维度,结果为2
,表示B
是二维数组。
3. 显示单元格内容
disp(B(2))
:显示B
中的第二个单元,其结果为{'Brenden'}
,因为它存储的是字符串'Brenden'
。disp(B(3))
:显示B
中的第三个单元,这是一个结构体y
,因此输出{1×1 struct}
。disp(B(4))
:显示B
中的第四个单元,一个 3x3 的元胞数组,输出{3×3 cell}
。
4. 条件判断与元胞删除
i = input('i=?');
if i == 0
B(3) = []; % 删除 B 的第三个单元
disp(B)
else
B{3} = []; % 将 B 的第三个单元置为空
disp(B)
end
根据用户输入的 i
值,代码执行不同的操作:
当 i == 0
时,B(3) = []
会删除第三个单元格,使 B
的尺寸从 2x2 变为 2x1,删除了结构体 y
,最终结果如下:
{[1]} {1×1 struct} {3×3 cell}
当 i ≠ 0
时,B{3} = []
会将第三个单元格内容清空,但不会删除该单元,元胞数组结构保持不变:
{[ 1]} {0×0 double}
{1×1 struct} {3×3 cell }