Относительно проблемы хранения для матрицы значений смешанного типа - PullRequest
1 голос
/ 23 ноября 2011

В моей программе есть цикл, и на каждой итерации будет генерироваться идентификатор. Я хочу сохранить эти идентификаторы в двумерном массиве, т. Е. A. В первом столбце A хранится номер итерации, т. Е. A (1,1) = 1 и A (2,1) = 2. Второй столбец A хранит идентификатор, сгенерированный во время каждой итерации, то есть A (1,2) хранит идентификатор, сгенерированный во время первой итерации. Сложность в том, что эти идентификаторы могут быть либо числовым значением, либо строкой. Например, A (1,2) = 12345; A (2,2) = abcde

Какую структуру данных я должен использовать для хранения этой матрицы смешанных значений?

1 Ответ

1 голос
/ 23 ноября 2011

У вас есть два хороших варианта: массив ячеек или массив структур.

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

    A{1,1} = 1;
    A{2,1} = 2;
    A{1,2} = 12345;
    A{2,2} = 'abcd';
    

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

    col1 =  cell2mat(A(:,1));
    
  2. Чтобы использовать массив структур, вам нужно определить поля. Преимущество этого заключается в том, что вы можете назвать свои столбцы данных.

    A(1).iteration = 1;
    A(2).iteration = 2;
    A(1).result = 12345;
    A(2).result = 'abcd';
    

    Чтобы получить доступ к одной строке данных, используйте A(1), например,

    >> A(1)
    ans = 
        iteration: 1
        result: 12345
    

    Для доступа к столбцу данных используйте скобки или скобки

    >> [A.iteration]  %This results a numeric array, or an error if not possible
    ans =
         1     2
    >> {A.result}  %This returns a cell array, as discussed above.
    ans = 
        [12345]    'abcd'
    

Какой вариант вы используете, зависит от характера вашей задачи и того, какой метод больше подходит вашему стилю. Я обычно начинаю с массива ячеек и в конце концов преобразую в массив структур, чтобы воспользоваться именованными полями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...