How to make a while loop fill out an array?
3 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Hello, I am trying to use a while loop to move through an array of strings and allocate the strings to a corresponding number system. Tstr provides the string array for the switch input. The output should be 1 1 7 1 2 1 4 1 3 complementing 'DEB' 'DEB' 'TFR' 'DEB' 'DD' 'DEB' 'FPI' 'DEB' 'CPT' however it returns 1 8 8 8 8 8 8 8 8. Please help me to return the intended array.
Tlist = { 'DEB' 'DEB' 'TFR' 'DEB' 'DD' 'DEB' 'FPI' 'DEB' 'CPT'};
l = length(Tlist);
n=1;
while n <= l
Tstr(1,n) = string(Tlist(1,n));
switch Tstr
case 'DEB'
Tt(1,n) = 1;
case 'DD'
Tt(1,n) = 2;
case 'CPT'
Tt(1,n) = 3;
case 'FPI'
Tt(1,n) = 4;
case 'FPO'
Tt(1,n) = 5;
case 'CHG'
Tt(1,n) = 6;
case 'TFR'
Tt(1,n) = 7;
otherwise
Tt(1,n) = 8;
end
n=n+1;
end
1 comentario
dpb
el 5 de En. de 2019
HINT:
What happens to
Tstr(1,n) = string(Tlist(1,n));
when n > 1 later on when you use simply Tstr?
Respuesta aceptada
dpb
el 5 de En. de 2019
Editada: dpb
el 5 de En. de 2019
Tlist = { 'DEB' 'DEB' 'TFR' 'DEB' 'DD' 'DEB' 'FPI' 'DEB' 'CPT'};
lup={'DEB','DD','CPT','FPI','FPO','CHG','TFR'};
>> [~,Tt]=ismember(Tlist,lup)
Tt =
1 1 7 1 2 1 4 1 3
>>
for fixup for missing elements add
Tt(Tt==0)=numel(lup)+1;
2 comentarios
dpb
el 6 de En. de 2019
Right, that would work. While the vectorized solution is probably the way to go, the loop/switch construct variable doesn't need the subscript at all...
Tstr=string(Tlist(1,n));
switch Tstr
...
Or, you could even eliminate the temporary entirely.
Más respuestas (0)
Ver también
Categorías
Más información sobre Parallel for-Loops (parfor) en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!