Comment convertir un tableau numérique en tableau de cellules de caractères et concaténer avec des caractères sur une seule ligne?
Exemple :
J'ai un tableau numérique:
nums = [1, 5, 12, 17]; cellfun(@(x) ['Sensor ' num2str(x)], num2cell(nums), 'UniformOutput', 0)
Je veux le convertir en un tableau de cellules de caractères et concattre avec les caractères 'Sensor' et obtenir:
{'Sensor 1', 'Sensor 5', 'Sensor 12', 'Sensor 17'}
Y'a-t-il un moyen de faire cela en une seule ligne?
J'ai pour l'instant:
[1, 5, 12, 17]
Existe-t-il un moyen plus simple ou plus compact manière?
3 Réponses :
Vous pourriez le rendre un peu plus net en utilisant sprintf ()
et arrayfun ()
mais pas sûr que cela vous fasse économiser beaucoup:
compose('Sensor %d', nums) % Char array compose("Sensor %d", nums) % String array (version 2017a onwards)
Vous pouvez également utiliser compose ()
dans les versions de MATLAB à partir de 2016a:
nums = [1, 5, 12, 17]; arrayfun(@(x) {sprintf('Sensor %d',x)}, nums) % Gives a cell array of char array strings arrayfun(@(x) sprintf("Sensor %d",x), nums) % Gives an array of string strings (version 2016b onwards)
Merci! c'est plus net que ma tentative.
Une alternative simple utilisant des chaînes:
>> nums = [1, 5, 12, 17]; >> cellstr("Sensor " + nums) ans = 1Ã4 cell array {'Sensor 1'} {'Sensor 5'} {'Sensor 12'} {'Sensor 17'}
Les chaînes nécessitent MATLAB R2017a .
Une autre option, qui n'utilise que les fonctions "Introduit avant R2006a", est:
A = [1, 5, 12, 17]; B = strcat('Sensor', {' '}, strtrim(cellstr(int2str(A.'))) );
Cela produit un vecteur de colonne - vous devez donc transposer si nécessaire.
Je pense que votre solution actuelle est très simple et compacte. Et c'est déjà un one-liner. Alors, pourquoi perdre du temps à économiser peut-être quelques caractères du code source? :)
@HansHirse: Pour une tâche aussi simple, ce n'est pas si compact, il me semble qu'il devrait y avoir une solution plus simple - plus courte.
Une solution plus simple et plus courte peut ne pas être nécessairement plus simple. Le Le code lisible est presque toujours plus important que le code intelligemment écrit, sauf si vous êtes en concurrence dans l'obscurcissement du code.