Не поймите, почему люди делают это настолько сложным:
objs.sort(function(a, b){
return a.last_nom > b.last_nom;
});
Для более строгих движков:
objs.sort(function(a, b){
return a.last_nom == b.last_nom ? 0 : +(a.last_nom > b.last_nom) || -1;
});
Смените оператор, чтобы он отсортировался по обратному алфавитному порядку.
Вам нужно использовать массивы клеток. Если число итераций известно заранее, я предлагаю вам предварительно выделить:
N = 10;
names = cell(1,N);
for i=1:N
names{i} = 'string';
end
, иначе вы можете сделать что-то вроде:
names = {};
for i=1:10
names{end+1} = 'string';
end
Как отмечали другие ответы, использование массивов ячеек , вероятно, является наиболее простым подходом, который приведет к тому, что ваша переменная name
будет массивом ячеек, где каждый элемент ячейки содержит строку.
Однако есть еще одна опция, использующая функцию STRVCAT , которая будет вертикально объединять строки. Вместо создания массива ячеек будет создана двумерная матрица символов, в которой каждая строка содержит одну строку. STRVCAT автоматически дополняет концы строк пробелами, если необходимо правильно заполнить строки матрицы:
>> string1 = 'hi';
>> string2 = 'there';
>> S = strvcat(string1,string2)
S =
hi
there
Как уже отмечалось, в MATLAB все строки в массиве должны быть одинаковой длины. Чтобы иметь строки разной длины, используйте массив ячеек:
name = {};
for i = somearray
name = [name; {string}];
end
Используйте функцию strcat
для добавления с использованием однострочного кода без использования цикла:
A={'food','banana','orange'}
A = «еда» «банан» «апельсин»
A = strcat(A,'s')
A = «продукты», «бананы», «апельсины»
,
name=[];
for_loop
filename = 'string';
name=[name; {filename}];
end
Если вы используете два массива, как показано ниже (A и B), вы можете добавить их так же, как вы делаете с другими матрицами.
A = {'a' ; 'b' ; 'c'};
B = {'1' ; '2' ; '3'};
Result = { A{:,1} ; B{:,1} }
Result =
'a' 'b' 'c'
'1' '2' '3'
Я знаю, что это старый поток, но кажется, что вам даже не нужен цикл, если это все, что вы делаете в цикле. Не могли бы вы просто использовать вертикальную конкатенацию?
mmm = {'str1'; 'str2'; 'str3'};
temp = {'a'; 'b'; 'c'};
mmm = [mmm; temp]
mmm =
'str1'
'str2'
'str3'
'a'
'b'
'c'
Для полноты следует также упомянуть новый класс string
, введенный в MATLAB R2016b; контейнер для текстовых данных вместе с набором функций для легкой обработки текста.
Чтобы сравнить его с моим другим примером , вот как выделить массив строк :
N = 10;
names = strings(1,N);
for i=1:N
names(i) = 'string';
end
А вот как динамически расширить массив без предварительного выделения:
names = strings(0);
for i=1:10
names(end+1) = 'string';
end
(Конечно, если строки все одинаковые или образуют последовательность с шаблоном, есть лучшие способы создать массив без цикла. Выше было просто Пример заполнения массива один за другим).
Контейнер string
также может конвертировать в / из символьных массивов и ячеечных массивов символов .
Вы идете правильным путем. Используйте {} для построения массива ячеек, например,
stringtable = 'a string';
for i = 1:3
stringtable = {stringtable;new_string(i)}
end
должен делать то, что вы хотите.