Коллеги добрый день
Подскажите пожалуйста , как убрать из массива нулевые значения
то есть есть array[1,4,2,0,2,0,2,0] Привязанный к барам
а нужно получить array2[1,4,2,2,2] уже отвязанный от оси времени с убранными нулями .
Коллеги добрый день
Подскажите пожалуйста , как убрать из массива нулевые значения
то есть есть array[1,4,2,0,2,0,2,0] Привязанный к барам
а нужно получить array2[1,4,2,2,2] уже отвязанный от оси времени с убранными нулями .
doube src[]={1,4,2,0,2,0,2,0};
double dst=ArraySize(src);
int srcIndex,dstIndex;
for(srcIndex=0,dstIndex=0;srcIndex<ArraySize(src);src++) {
if (src[srcIndex]==0) continue; // нулевые элементы пропускаем
dst[dstIndex++]=src[srcIndex]; // прочее копируем
}
ArrayResize(dst,dstIndex); // выравниваем массив-получатель
doube src[]={1,4,2,0,2,0,2,0};
double dst=ArraySize(src);
int srcIndex,dstIndex;
for(srcIndex=0,dstIndex=0;srcIndex<ArraySize(src);src++) {
if (src[srcIndex]==0) continue; // нулевые элементы пропускаем
dst[dstIndex++]=src[srcIndex]; // прочее копируем
}
ArrayResize(dst,dstIndex); // выравниваем массив-получатель
Может srcIndex++ ?
doube src[]={1,4,2,0,2,0,2,0};
double dst=ArraySize(src);
int srcIndex,dstIndex;
for(srcIndex=0,dstIndex=0;srcIndex<ArraySize(src);src++) {
if (src[srcIndex]==0) continue; // нулевые элементы пропускаем
dst[dstIndex++]=src[srcIndex]; // прочее копируем
}
ArrayResize(dst,dstIndex); // выравниваем массив-получатель
Мужчины , Спасибо ! идея понятна
#property strict double src[]={1,4,2,0,0,5,0,3,0}; void OnStart() { Alert("--------"); out(); // Вывод исходного массива int k=ArraySize(src); // Номер последнего элемента for(int cnt=0; cnt<k; cnt++) { if (src[cnt]!=0) continue; // нужные элементы пропускаем ArrayCopy(src,src,cnt,cnt+1); // копирование массива со сдвигом влево ArrayResize(src,ArraySize(src)-1); // сокращаем массив cnt--; k--; // массив сдвинулся влево и мы отступаем влево out(); // Вывод промежуточного результата } out(); // Вывод окончательного результата } // Эта функция для вывода массива чтоб было понятно void out() { string st=""; for(int i=0; i<ArraySize(src); i++) st+=" "+string(src[i]); Alert(st); }
внизу исходный массив, выше промежуточный, вверху результат
Еще раз Спасибо !
Коллеги добрый день
Подскажите пожалуйста , как убрать из массива нулевые значения
то есть есть array[1,4,2,0,2,0,2,0] Привязанный к барам
а нужно получить array2[1,4,2,2,2] уже отвязанный от оси времени с убранными нулями .
Можно обойтись без создания нового массива.
void OnStart() { int src[]; // исходный динамический массив ArrayResize(src,8); // задаем размерность src[0]=1; src[1]=4; src[2]=2; src[3]=0; src[4]=2; src[5]=0; src[6]=2; src[7]=0; // инициализируем исходный массив int size=ArraySize(src); // выясняем размерность, если не известна int j=-1; for(int i=0;i<size;i++) { if(j<0) {if(src[i]==0) j=i;} else if(src[i]!=0) {src[j]=src[i]; j++;} } ArrayResize(src,j); // Проверяем правильность выполнения string s=""; for(int i=0;i<j;i++) s+=IntegerToString(src[i])+" "; Print(s); }Вряд ли можно придумать что-то быстрее.
Можно обойтись без создания нового массива.
Вряд ли можно придумать что-то быстрее.Пожалуй так всё же быстрее:
void OnStart() { int src[]; // исходный динамический массив ArrayResize(src,8); // задаем размерность src[0]=1; src[1]=4; src[2]=2; src[3]=0; src[4]=2; src[5]=0; src[6]=2; src[7]=0; // инициализируем исходный массив int size=ArraySize(src); int i=0,j; while(i<size && src[i]!=0) i++; if (i==size) { Print (" Массив не содержит нулей, преобразование не требуется"); return;} j=i; for(;i<size;i++) { if(src[i]!=0) {src[j]=src[i]; j++;} } ArrayResize(src,j); // Проверяем правильность выполнения string s=""; for(i=0;i<j;i++) s+=IntegerToString(src[i])+" "; Print(s); }
но если все же требуется с созданием нового массива, то самый быстрый и оптимальный вариант на мой взгляд:
void OnStart() { int src[]={1,4,2,0,2,0,2,0}; // исходный массив int size=ArraySize(src); int src2[]; ArrayResize(src2,size); int i=0,j; while(i<size && src[i]!=0) i++; ArrayCopy(src2,src,0,0,i); if(i==size) { Print(" Массив не содержит нулей"); return; } j=i; for(;i<size;i++) { if(src[i]!=0) {src2[j]=src[i]; j++;} } ArrayResize(src2,j); // Печатаем новый массив string s=""; for(i=0;i<j;i++) s+=IntegerToString(src2[i])+" "; Print(s); }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Коллеги добрый день
Подскажите пожалуйста , как убрать из массива нулевые значения
то есть есть array[1,4,2,0,2,0,2,0] Привязанный к барам
а нужно получить array2[1,4,2,2,2] уже отвязанный от оси времени с убранными нулями .