2016-02-04 4 views
0

Я хочу запустить цикл, и когда две вещи не равны, я хочу, чтобы этот индекс был опущен из моей новой структуры. Он работает до тех пор, пока не достигнет первого неравенства. Затем он почему-то прекращает цикл, и он не поднимается на j = 46 после опущения j = 45. Понятия не имею почему. Вот кодОпускание индексов, когда условие не выполняется

for j=1:length(files_cdf) 
    z(j)=isequal(files_cdf(j).ith,list(j)); 
    if isequal(z(j),1) 
     cdf_new(j)=files_cdf(j); 
    else 
     cdf_new(j)=[]; 
    end 
end 

ответ

0

Вот два подхода. Первый из них может привести к поражению производительности, поскольку это означает, что вы не можете предварительно распределить массив cdf_new.

for j=1:length(files_cdf) 
    z(j)=isequal(files_cdf(j).ith,list(j)); 
    if isequal(z(j),1) 
     cdf_new(end+1)=files_cdf(j); 
    end 
end 

Это только растет массив cdf_new для каждого элемента, который вы хотите сохранить.

В качестве альтернативы, вы можете сохранить отдельный счетчик для индекса в cdf_new.

c=0; 
for j=1:length(files_cdf) 
    z(j)=isequal(files_cdf(j).ith,list(j)); 
    if isequal(z(j),1) 
     c=c+1; 
     cdf_new(c)=files_cdf(j); 
    end 
end 

Используя эту технику, если вы ваш массив выделяется заранее cdf_new, вы можете просто обрезать его только допустимые значения:

cdf_new = cdfnew(1:c);