Как создать вектор из клеточных массивов - PullRequest
0 голосов
/ 30 сентября 2011

Я хочу сохранить все содержимое, как имя и оценки для 30 студентов. Я храню информацию имени и меток вместе в массиве ячеек. Но для сравнения 2 учеников мне нужно хранить массивы ячеек в векторе из 30 элементов, чтобы я мог получить к ним доступ позже.

Ответы [ 3 ]

6 голосов
/ 30 сентября 2011

Я бы рекомендовал использовать массив структур. Например

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.

2 голосов
/ 30 сентября 2011

Нужен ли вам двумерный массив ячеек:

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 голос
/ 01 октября 2011

Скажем, у вас было следующее:

names = {'Andrew'; 'Betty'; 'Charles'}
marks = [90; 92; 88]

Я подозреваю, что вы пробовали это:

>> C = {names marks}
C = 
    {3x1 cell}    [3x1 double]

По сути, это создает погреб 1x2 (вектор). Вы можете получить доступ к значениям для студента как: C{1}{3} и C{2}(3).

Более удобной формой является создание подвала 3x2 (матрицы):

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

, которым легче манипулировать. Например, если вы хотите извлечь первого и последнего ученика для сравнения:

C([1 end],:)

Вы можете делать такие вещи, как сортировка по классу или по имени:

[~,idx] = sort(marks);
C(idx,:)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...