How to create a string with names that differ, without a loop?

조회 수: 11 (최근 30일)
Leonard Kluss
Leonard Kluss 2018년 12월 6일
댓글: Guillaume 2018년 12월 6일
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?

채택된 답변

Stephen23
Stephen23 2018년 12월 6일
편집: Stephen23 2018년 12월 6일
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)
As an alternative you could use the string data class and compose:
compose('K%d',1:39)
  댓글 수: 1
Guillaume
Guillaume 2018년 12월 6일
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.

댓글을 달려면 로그인하십시오.

추가 답변 (1개)

Guillaume
Guillaume 2018년 12월 6일
compose works exactly that way:
D_N = compose('K%d', 1:39)
Another option is to use string arrays:
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)

카테고리

Help CenterFile Exchange에서 Data Type Conversion에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by