Есть массив содержащий набор данных по типу 1,2,3,6,9,5,6,3,25,6,8,7,4 нужно удалить например значения 3 и на выходе получить тот же массив без 3 и пустых мест...
Я ищу самый быстрый способ очистки массива от ненужных значений...
На ум приходит такой пример
Может есть способы экономнее и быстрее ?
ArrayResize убрать из циклов, и (если бороться за каждый LONG то проверку условий и еденичный Resize сделать в конце)
но это как-бы типично - вынести из циклов всё, что можно сделать позже оптом или не делать вовсе..
int ArrayDeleteEmpty(const int del, int &one[]) { int i = ArrayBsearch(one, del), y = ArraySize(one)-1; if(one[i] != del) return 0; for(; i<y; i++) one[i] = one[i+1]; ArrayResize(one, y); return y; }
Вот такой вариант:
template<typename T> int arrayFilter(T &data[], const T value) { int dst = 0, src = 0; for(; src < ArraySize(data); src++) { if(data[src] != value) { if(dst != src) { data[dst] = data[src]; } dst++; } } if(dst < src) { ArrayResize(data, dst); // will only work with dynamic array } return dst; } void OnStart() { long array[] = {1, 2, 3, 6, 9, 5, 6, 3, 25, 6, 8, 7, 4}; ArrayPrint(array, 0, NULL, 0, arrayFilter<long>(array, 3)); }
Возвращает количество элементов в отфильтрованном массиве. Сможет автоматически уменьшить его размер, если он динамический.
Вот такой вариант:
Возвращает количество элементов в отфильтрованном массиве. Сможет автоматически уменьшить его размер, если он динамический.
ещё немного(пару диаметров земли) и придём к функциональщине :-)
set target [ filter $source [ lambda x { expr $x !=3 } ] ]
это tcl, на лиспе ещё короче
Самый быстрый способ будет с ArrayCopy() и по циклу проходить в обратном порядке, чтобы не перемещать те элементы,которые будут удалены.
не подходит, так как может быть массив структур содержащий строки.
У одного 42 продукта, у другого 6 у третьего 30. Боюсь представить какая ж*па там внутри с такими вопросами и ответами
Глупый вопрос, это не заданный вопрос.
У меня есть несколько вариантов решения задачи, но я продолжаю искать лучшие решения и учиться у других.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Есть массив содержащий набор данных по типу 1,2,3,6,9,5,6,3,25,6,8,7,4 нужно удалить например значения 3 и на выходе получить тот же массив без 3 и пустых мест...
Я ищу самый быстрый способ очистки массива от ненужных значений...
На ум приходит такой пример
Может есть способы экономнее и быстрее ?