How to create a string with names that differ, without a loop?
10 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Leonard Kluss
am 6 Dez. 2018
Kommentiert: Guillaume
am 6 Dez. 2018
I want
D_N = {'K1'; 'K2'; '...' ;'K9' ; '...'};
until Kn is reached with n equal to a parameter of my program (for example 39).
I can chose to use:
for ii = 1:39
D_N{ii} = sprintf('K%d', ii);
end
for ii = 1:39
D_N{ii} = ['K' num2str(ii)];
end
But is there a way without using this stupid loop?
0 Kommentare
Akzeptierte Antwort
Stephen23
am 6 Dez. 2018
Bearbeitet: Stephen23
am 6 Dez. 2018
The fastest solution is to use the undocumented function sprintfc:
sprintfc('K%d',1:39)
As this is undocumented, use at your own risk. Otherwise arrayfun works, but feels like overkill:
arrayfun(@(n)sprintf('K%d',n),1:39,'uni',0)
compose('K%d',1:39)
1 Kommentar
Guillaume
am 6 Dez. 2018
Since R2016b, there's absolutely no reason to use sprintfc and since it's undocumented, potentially disappearing in a future version, shouldn't be used at all.
compose doesn't require the use of the string class at all. compose produces a string array if the formatting string is of class string, and a cell array of char vectors if the formatting string is a char vector.
Always use compose or even easier the string composing functions as I've shown.
Weitere Antworten (1)
Guillaume
am 6 Dez. 2018
compose works exactly that way:
D_N = compose('K%d', 1:39)
D_N = "K" + (1:39)
which are easier to work with than cell arrays of char arrays.
In versions of matlab without string arrays or compose (pre-R2016b), you can use the completely undocumented sprintfc instead:
D_N = sprintfc('K%d', 1:39)
0 Kommentare
Siehe auch
Kategorien
Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!