2011-09-29 40 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,:) 
如果你決定去與結構