我想存储30名学生的姓名和标记等所有内容。我将名称和标记的信息保存在一个单元格数组中。但为了比较2名学生,我需要将单元格数组存储在30个元素的向量中,以便稍后访问。
答案 0 :(得分:6)
我建议使用结构数组。例如
students(1) = struct('name','Andrew', 'mark',90);
students(2) = struct('name','Betty', 'mark',92);
students(3) = struct('name','Charles', 'mark',88);
然后,您可以通过索引为student(n)
来简单地引用它们。您还可以获取并设置其特定字段,例如someName = student(2).name
或student(1).mark = 98
。
答案 1 :(得分:2)
它是否是您想要的2D单元阵列:
students = cell(30, 2);
students{1,1} = 'Andrew';
students{1,2} = 90;
% or
students(2,:) = {'Becky' 92};
% etc
或是单元格数组的单元格数组?
students = cell(30, 1);
students{1}{1} = 'Andrew';
students{1}{2} = 90;
% or
students{2} = {'Becky' 92};
% etc
无论如何,我强烈建议使用@Phonon建议的结构数组。
或者,您可以使用对象数组。在MATLAB帮助中查看面向对象的编程信息。
答案 2 :(得分:1)
说你有以下内容:
names = {'Andrew'; 'Betty'; 'Charles'}
marks = [90; 92; 88]
我怀疑你试过这个:
>> C = {names marks}
C =
{3x1 cell} [3x1 double]
基本上它会创建一个1x2的cellarray(矢量)。您可以访问学生的值:C{1}{3}
和C{2}(3)
。
更方便的形式是创建3x2 cellarray(矩阵):
>> C = [names num2cell(marks)]
C =
'Andrew' [90]
'Betty' [92]
'Charles' [88]
更容易操作。例如,如果您想提取第一个和最后一个学生进行比较:
C([1 end],:)
您可以按照年级或名称进行排序:
[~,idx] = sort(marks);
C(idx,:)