Borrar filtros
Borrar filtros

Info

La pregunta está cerrada. Vuélvala a abrir para editarla o responderla.

How to fix this loop?

1 visualización (últimos 30 días)
Aswin Sandirakumaran
Aswin Sandirakumaran el 30 de Jun. de 2018
Cerrada: MATLAB Answer Bot el 20 de Ag. de 2021
C = {1,2,3,1,4,6};
%for i = 1:length(C)
List = cell(size(C)); %creating empty list
for i = 1:length(C)
if isequal(C{i}, 1)
List(1) = C(i);
else
List(2) = C(i);
end
end
I GET A OUTPUT OF LIST AS =
BUT MY OUTPUT SHOULD LOOK LIKE:
IN cell 1 = [1,1]
IN CELL 2 = [2,3,4,6]
THE PROBLEM IS IT STORES THE LAST ELEMENT ENCOUNTERED , BUT IT SHOULD STORE ALL ELEMENTS ENCOUNTERED. HOW TO FIX THIS??

Respuestas (1)

Stephen23
Stephen23 el 30 de Jun. de 2018
Editada: Stephen23 el 30 de Jun. de 2018
Simpler with a numeric vector:
>> V = [1,2,3,1,4,6];
>> List = {V(V==1),V(V~=1)};
>> List{1}
ans =
1 1
>> List{2}
ans =
2 3 4 6
Note: to get V from the cell array C:
V = [C{:}];
But if you really want to write inefficient code using a loop:
List = cell(1,2);
for k = 1:numel(C)
if isequal(C{k}, 1)
List{1} = [List{1},C{k}];
else
List{2} = [List{2},C{k}];
end
end
which produces exactly the same output less efficiently using more lines of code.
  1 comentario
Stephen23
Stephen23 el 30 de Jun. de 2018
Editada: Stephen23 el 30 de Jun. de 2018
Try this:
C = {1,2,3,1,4,6};
List = cell(1,2);
for k = 1:numel(C)
if isequal(C{k}, 1)
List{1} = [List{1},C{k}];
else
List{2} = [List{2},C{k}];
end
end
giving
>> List{1}
ans =
1 1
>> List{2}
ans =
2 3 4 6

La pregunta está cerrada.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by