如何创建单元格数组的向量

时间:2011-09-29 21:23:43

标签: matlab

我想存储30名学生的姓名和标记等所有内容。我将名称和标记的信息保存在一个单元格数组中。但为了比较2名学生,我需要将单元格数组存储在30个元素的向量中,以便稍后访问。

3 个答案:

答案 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).namestudent(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,:)