Функция перебора - страница 2

 
Georgiy Merts:

Так ведь и я именно ради сортировки и беру массив CObjArray - и имею сортировку по ЛЮБОМУ полю, которая присутствует в структуре. Тоже трудоемкость минимальна - необходимо лишь написать функцию сравнения нужных полей.  

Не, Дмитрий, можно и так, как ты предлагаешь, и даже, наверно, для новичка так будет лучше.

Во-первых нестандартный элемент -  CObjArray, а во-вторых - все-таки писать функцию сравнения.

 
Dmitry Fedoseev:

Во-первых нестандартный элемент -  CObjArray, а во-вторых - все-таки писать функцию сравнения.

Какой же он нестандартный, если входит в Стандартную библиотеку ?

Ошибся я в названиии - CArrayObj

А функцию сравнения, да, писать надо .

 
//+------------------------------------------------------------------+
//|                                                      Test_en.mq5 |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   long    array[4][2]={{2,20},{1,10},{4,40},{3,30}};
   ArrayPrint(array);
   ArraySort(array);
   ArrayPrint(array);
  }
//+------------------------------------------------------------------+

Результат:

    [,0][,1]
[0,]   2  20
[1,]   1  10
[2,]   4  40
[3,]   3  30
    [,0][,1]
[0,]   1  10
[1,]   2  20
[2,]   3  30
[3,]   4  40
Файлы:
Test_en.mq5  2 kb
 
Georgiy Merts:

Какой же он нестандартный, если входит в Стандартную библиотеку ?

Ошибся я в названиии - CArrayObj

А функцию сравнения, да, писать надо .

В том смысле, что в самом эмкуле нет такого.

Для написания своей функции сортировки надо писать свой дочерний класс, потом еще с типом заморачиваться. Оно кому-то надо? Да еще и справка по этой стандартной библиотеке - никакая.

 
Vladimir Karputov:

Результат:

Ну вот и в МТ5 работает.

 

одномерного массива хватит)
собрать тикеты и отсортировать по возрастанию 

 
Taras Slobodyanik:

одномерного массива хватит)
собрать тикеты и отсортировать по возрастанию 

А не приходилось видеть, что бы тикеты шли не по возрастанию?

 
Dmitry Fedoseev:

В том смысле, что в самом эмкуле нет такого.

Для написания своей функции сортировки надо писать свой дочерний класс, потом еще с типом заморачиваться. Оно кому-то надо? Да еще и справка по этой стандартной библиотеке - никакая.

Все верно, и для решения конкретно этой задачи - сойдет.

Но универсальность и расширяемость решения - весьма и весьма низкая. Перебор ордеров по различным ключам - это очень востребованная фича во всех экспертах.  Завтра тебе потребуется добавить полей, и искать внутри них, а у тебя уже код в ряде мест "завязан" на имеющийся массив - и что будешь делать ?  Я не раз убеждался, что все эти "заморочки с дочерними классами" - потом очень выручают в ряде случаев.

 
Taras Slobodyanik:

одномерного массива хватит)
собрать тикеты и отсортировать по возрастанию 

Верно заметили выше - нигде не прописано, что тикеты обязательно будут идти по возрастанию. Дмитрий правильно предложил вариант. Мне он не нравится исключительно из-за слабой расширяемости. А если модифицировать код не предполагается - он вполне себе хорош.

 
Georgiy Merts:

Все верно, и для решения конкретно этой задачи - сойдет.

Но универсальность и расширяемость решения - весьма и весьма низкая. Перебор ордеров по различным ключам - это очень востребованная фича во всех экспертах.  Завтра тебе потребуется добавить полей, и искать внутри них - и что будешь делать ?  Я не раз убеждался, что все эти "заморочки с дочерними классами" - потом очень выручают в ряде случаев.

Тут зависит от того, с какой стороны подойти к делу. Если с правильной, то всех этих заморочек нет. Даже вот эта сортировка по времени - редчайшая задача.

Тикеты же сами не появятся в этом массиве, значит его надо постоянно обновлять. Зачем делать два дела, если задачу модно решить сразу, при оно проходе по всем ордерам?

Причина обращения: