2010-06-04 5 views
8

¿Cómo se podría construir eficientemente una matriz de celdas de cadenas que contienen números (en mi caso particular, una matriz de celdas de etiquetas para una leyenda).Cómo construir una matriz de celdas de cadenas que contengan números

Ej: {'series 1', 'series 2', 'series 3'}

He tratado de cosas a lo largo de las líneas de

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

pero al parecer matrices sprintf y los teléfonos no juegan bien juntos.

Algo como esto funciona si solo quiero el número, pero no funciona si también quiero texto.

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

Obviamente, se puede hacer en un bucle, pero tiene que haber una manera inteligente de una sola línea de hacer esto.

Respuesta

6

Las funciones INT2STR y STRCAT hacer el truco:

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

cellArray = 

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

una manera ligeramente diferente:

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

o alternativamente

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

con el resultado de:

cellArray = 
    'series 1' 
    'series 2' 
    'series 3' 
3

Usted puede utilizar el de una sola línea de abajo para más complicada de salida:

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

cellarray = 

    'item 1 of 3' 'item 2 of 3' 'item 3 of 3' 
+0

Sí! ¡Esta! Usted resolvió mi problema, las otras soluciones no funcionan para productos más involucrados. Originalmente hice un bucle que no funcionó cuando se utilizó como entrada para legend(): para ii = 1: n; cellArray {ii} = {sptrinf ('n% d, val% 0.2f', ii, vals (ii))}; end – Leo

12

Sé que ha sido 4 años, pero me encontré con la función indocumentado sprintfc que se utiliza para hacer exactamente lo que quiere:

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

CellArray = 

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

bueno ... podría ser útil para alguien, supongo.

+2

Muy útil, gracias. – Flyto

+0

¡genial! Me alegro de que alguien haya descubierto esta publicación :) –

Cuestiones relacionadas