Как построить массив ячеек из строк, содержащих числа - PullRequest
8 голосов
/ 04 июня 2010

Как эффективно построить массив ячеек из строк, содержащих числа (в моем конкретном случае - массив ячеек с метками для легенды).

Например: {'series 1', 'series 2', 'series 3'}

IЯ пробовал что-то вроде

sprintf('series %i', {1:10})

, но, очевидно, sprintf и массивы ячеек не очень хорошо играют вместе.

Нечто подобное работает, если мне нужно только число, но не работает, если я тоже хочу текст.

cellstr(int2str([1:10]'))

Очевидно, это можно сделать в цикле, но тамдолжен быть умный способ сделать это одним вкладышем.

Ответы [ 4 ]

12 голосов
/ 25 сентября 2014

Я знаю, что прошло 4 года, но я натолкнулся на недокументированную функцию sprintfc , которая используется для выполнения именно того, что вы хотите:

CellArray = sprintfc('series %i',1:3);

CellArray = 

    'series 1'    'series 2'    'series 3'

ну ... это может быть полезно кому-то, я думаю.

6 голосов
/ 04 июня 2010

Функции INT2STR и STRCAT делают свое дело:

>> cellArray = strcat({'series '},int2str((1:3).')).'

cellArray = 

    'series 1'    'series 2'    'series 3'
3 голосов
/ 08 марта 2013

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

cellarray = arrayfun(@(x) {sprintf('item %d of 3', x)}, 1:3)

cellarray = 

    'item 1 of 3'    'item 2 of 3'    'item 3 of 3'
3 голосов
/ 05 июня 2010

Немного по-другому:

cellArray = cellstr( num2str((1:3)', 'series %d') )

или альтернативно

cellArray = strcat( num2str((1:3)', 'series %d'), {} )

с результатом:

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