Подскажите пожалуйста. Не знаю, как правильно такое делается с точки зрения синтаксиса кода:
Как правильно с точки зрения синтаксиса создать массив, чтобы на месте первого элемента был мой linePrice из MyStruct, а на месте второго элемента был linePrice?
Вроде как где-то на форуме встречал мысль, что это возможно, но не знаю, как это правильно делается с точки зрения синтаксиса кода.
myStructArray[0].linePrice=1.111; myStructArray[1].lineName="xxx";
Только для счастья такого решения недостаточно. Какой прок от такого массива и структуры? Ну записали вы что-то в структуру, ну потом из структуры в массив……… и что? Хотя я даже сомневаюсь, что предложенный Сергеем вариант будет работать… но проверять не буду.
Нормальный массив структур выглядет так
struct myStruct { string lineName; double linePrice; } MyStruct[];// Также можно задать фиксированный размер массива // А можно перед внесением новой записи увеличить размер динамического массива MyStruct[0].lineName = "огого"; MyStruct[0].linePrice = 1.12453;
Только для счастья такого решения недостаточно. Какой прок от такого массива и структуры? Ну записали вы что-то в структуру, ну потом из структуры в массив……… и что? Хотя я даже сомневаюсь, что предложенный Сергеем вариант будет работать… но проверять не буду.
Нормальный массив структур выглядет так
Я надеялся, что с помощью массива, я смогу более простым способом рассортировать структуру. Чтобы, к примеру, "linePrice" шли в порядке возрастания, а не в перемешку, как до сортировки.
Но, к сожалению, оказалось, что нельзя сортировать структуры с помощью функции ArraySort(). Уже написал собственный кустарный метод для сортировки нужных мне структур по определенным параметрам.
Так что целом, вы правы, что толка от переписывания структуры в массив и обратно немного. Но, благодаря ответу Сергея, я понял, что не смогу легко сделать то, что хотел и уже решил задачу другим способом. Так что иногда даже от бесполезных решений есть польза в том, что осознаешь, что они бесполезные и придумываешь полезные )
#include <Arrays/ArrayObj.mqh> class Line : public CObject { private: string m_name; double m_price; public: Line(string name, double price) { m_name = name; m_price = price; }; double Price() { return m_price; }; string ToStr() { return StringFormat("%s = %.5f", m_name, m_price); }; virtual int Compare(const CObject *item, const int mode=0) const; }; int Line::Compare(const CObject *item,const int mode=0) const { Line *line = (Line *)item; if (m_price > line.Price()) return (mode == 0) ? 1 : -1; if (m_price < line.Price()) return (mode == 0) ? -1 : 1; return 0; }; void OnStart() { CArrayObj *lines = new CArrayObj(); lines.Add(new Line("nameX", 1.05)); lines.Add(new Line("nameY", 1.25)); lines.Add(new Line("nameZ", 1.15)); //lines.Sort(); // в порядке возрастания lines.Sort(1); // в порядке убывания for (int j = 0; j < lines.Total(); j++) { Line *line = lines.At(j); PrintFormat("[%i] %s", j, line.ToStr()); } delete lines; }Параметр mode позволяет организовать сортировку по любому свойству объекта. Для этого нужно изменить функцию Compare
Параметр mode позволяет организовать сортировку по любому свойству объекта. Для этого нужно изменить функцию Compare
Спасибо большое за ответ. Выглядит очень полезно. Возьму на вооружение!
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите пожалуйста. Не знаю, как правильно такое делается с точки зрения синтаксиса кода:
Как правильно с точки зрения синтаксиса создать массив, чтобы на месте первого элемента был мой linePrice из MyStruct, а на месте второго элемента был linePrice?
Вроде как где-то на форуме встречал мысль, что это возможно, но не знаю, как это правильно делается с точки зрения синтаксиса кода.