2011-09-29 41 views
0

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

回答

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

,这个答案也可能会有所帮助:http://stackoverflow.com/questions/4166438/how-do-i-define-a-structure-in-matlab/4169216#4169216 – Amro

2

难道你想有一个二维单元阵列:

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帮助中的面向对象编程信息。

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)

一个更方便的形式是创建一个3×2的cellarray(矩阵):

>> C = [names num2cell(marks)] 
C = 
'Andrew'  [90] 
'Betty'  [92] 
'Charles' [88] 

其更容易操控。例如,如果你要提取的第一个和最后学生作比较:

C([1 end],:) 

您可以通过等级或名称做这样的事情排序:

[~,idx] = sort(marks); 
C(idx,:) 
如果你决定去与结构