Características del lenguaje mql5, sutilezas y técnicas - página 47
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Como éste?
https://www.mql5.com/ru/code/9336
La pregunta era sobre un array de estructuras y la ordenación por campos de estructura.
¿Ha hecho alguien una ordenación eficiente de recursos de un array de estructuras por cualquier campo (no cadena) dado de la estructura?
Supongamos que hay una estructura con tres campos int, datetime y double, y que hay un array lleno de datos formado por esta estructura. En cada celda del array se rellenan los campos de la estructura.
¿Cómo ordenar esta matriz por cualquiera de estos campos?
Crear array double[][2], llenarlo como { fieldvalue, arrayindex }. Ordenar por ArraySort regular (por primer cambio). Y luego hay que ordenar las estructuras en el array según los índices.
Quería evitar este método. Pensé que tal vez había otras maneras.
¿Por qué evitarlo? No hay una forma más rápida de evitarlo, ya que la ordenación se realiza mediante una función nativa.
¿Por qué evitarlo? No se puede pensar en nada más rápido, ya que es una función nativa que hace la clasificación.
¿Ha hecho alguien una ordenación eficiente de recursos de un array de estructuras por cualquier campo (no cadena) dado de la estructura?
Supongamos que hay una estructura con tres campos int, datetime y double, y que hay un array lleno de datos formado por esta estructura. En cada celda del array se rellenan los campos de la estructura.
¿Cómo ordenar esta matriz por cualquiera de estos campos?
Hola, si necesitas algún tipo de función de ordenación universal que pueda ordenar un array de tipo de datos complejo, eso es imposible en principio.
Si necesitas capacidad de ordenación multifactorial de un tipo conocido, puedes hacerlo usando clases, y en particular CArrayObj está diseñado para ello.
Debo añadir que incluso en lenguajes adultos como C# la ordenación de objetos complejos se resuelve mediante IComparer personalizado. Es decir, tendrás que escribir tú mismo un criterio de ordenación.
Este es el método que quería evitar. Pensé que podría haber otras formas.
Hay dos maneras.
La forma número uno es poner el operador <
La segunda vía son los funcionarios.
Método número uno:
El método número dos es similar, sólo que el operador es completamente externo y se pasa a la ordenación. Es un poco más complicado, pero mucho más versátil.
Si lo necesitas, puedo darte algunas ideas, pero sólo después.
La ordenación solo es un copypaste de kodobase, si necesitas más rápido, tendrás que escribir tu propio inteligente, pero solo tienes que escribirlo una vez y no te molestes más.El método número dos es similar, sólo que el operador es completamente externo y se pasa a la ordenación. Es un poco más complicado pero mucho más versátil.
Es decir, hay que utilizar punteros a funciones