Qualcuno ha fatto un ordinamento efficiente in termini di risorse di un array di strutture per qualsiasi campo (non stringa) dato della struttura?
Supponiamo che ci sia una struttura con tre campi int, datetime e double, e che ci sia un array riempito di dati che consiste in questa struttura. In ogni cella della matrice, i campi della struttura sono popolati.
Come ordinare questo array per uno qualsiasi di questi campi?
Si crea l'array double[][2], lo si riempie come { fieldvalue, arrayindex }. Ordina per ArraySort regolare (per prima modifica). E poi si dispongono le strutture nell'array secondo gli indici. Credo che questo sia il modo più veloce di tutti i modi possibili in MQL.
Alexey Navoykov: Creare array double[][2], riempirlo come { fieldvalue, arrayindex }. Ordina per ArraySort regolare (per prima modifica). E poi dovete disporre le strutture nell'array secondo gli indici.
Volevo bypassare questo metodo. Ho pensato che forse ci sono altri modi.
Perché bypassarlo? Non si può pensare a qualcosa di più veloce, dato che è una funzione nativa che fa l'ordinamento.
In realtà, ho iniziato subito con questo. Ho pensato che forse qualcuno ha inventato un bel modo per ordinare un array di strutture per qualsiasi campo.
Qualcuno ha fatto un ordinamento efficiente in termini di risorse di un array di strutture per qualsiasi campo (non stringa) dato della struttura?
Supponiamo che ci sia una struttura con tre campi int, datetime e double, e che ci sia un array riempito di dati che consiste in questa struttura. In ogni cella della matrice, i campi della struttura sono popolati.
Come ordinare questo array per uno qualsiasi di questi campi?
Ciao, se hai bisogno di una sorta di funzione di ordinamento universale che possa ordinare un array di tipo di dati complesso, questo è impossibile in linea di principio.
Se avete bisogno di capacità di ordinamento multifattoriale di un tipo noto, potete farlo usando le classi, e in particolare CArrayObj è progettato per questo.
Dovrei aggiungere che anche in linguaggi adulti come C# l'ordinamento degli oggetti complessi è risolto tramite IComparer personalizzato. Cioè dovrete scrivere voi stessi un criterio di ordinamento.
Il metodo numero due è simile, solo che l'operatore è completamente esterno e viene passato all'ordinamento. È un po' più complicato, ma molto più versatile.
Se hai bisogno, posso darti qualche idea, ma solo dopo.
L'ordinamento si limita a copiare un po' di kodobase, se avete bisogno di una maggiore velocità, dovrete scriverne uno intelligente, ma basta scriverlo una volta e non preoccupatevi più.
Il metodo numero due è simile, solo che l'operatore è completamente esterno e viene passato all'ordinamento. È un po' più complicato ma molto più versatile.
Come questo?
https://www.mql5.com/ru/code/9336
La domanda riguardava un array di strutture e l'ordinamento per campi di strutture.
Qualcuno ha fatto un ordinamento efficiente in termini di risorse di un array di strutture per qualsiasi campo (non stringa) dato della struttura?
Supponiamo che ci sia una struttura con tre campi int, datetime e double, e che ci sia un array riempito di dati che consiste in questa struttura. In ogni cella della matrice, i campi della struttura sono popolati.
Come ordinare questo array per uno qualsiasi di questi campi?
Creare array double[][2], riempirlo come { fieldvalue, arrayindex }. Ordina per ArraySort regolare (per prima modifica). E poi dovete disporre le strutture nell'array secondo gli indici.
Volevo bypassare questo metodo. Ho pensato che forse ci sono altri modi.
Perché bypassarlo? Non si può pensare a qualcosa di più veloce, perché l'ordinamento è fatto da una funzione nativa.
Perché bypassarlo? Non si può pensare a qualcosa di più veloce, dato che è una funzione nativa che fa l'ordinamento.
Qualcuno ha fatto un ordinamento efficiente in termini di risorse di un array di strutture per qualsiasi campo (non stringa) dato della struttura?
Supponiamo che ci sia una struttura con tre campi int, datetime e double, e che ci sia un array riempito di dati che consiste in questa struttura. In ogni cella della matrice, i campi della struttura sono popolati.
Come ordinare questo array per uno qualsiasi di questi campi?
Ciao, se hai bisogno di una sorta di funzione di ordinamento universale che possa ordinare un array di tipo di dati complesso, questo è impossibile in linea di principio.
Se avete bisogno di capacità di ordinamento multifattoriale di un tipo noto, potete farlo usando le classi, e in particolare CArrayObj è progettato per questo.
Dovrei aggiungere che anche in linguaggi adulti come C# l'ordinamento degli oggetti complessi è risolto tramite IComparer personalizzato. Cioè dovrete scrivere voi stessi un criterio di ordinamento.
Questo è il metodo che volevo aggirare. Ho pensato che potrebbero esserci altri modi.
Ci sono due modi.
Il modo numero uno è impostare l'operatore <
La via numero due sono i funzionari.
Metodo numero uno:
Il metodo numero due è simile, solo che l'operatore è completamente esterno e viene passato all'ordinamento. È un po' più complicato, ma molto più versatile.
Se hai bisogno, posso darti qualche idea, ma solo dopo.
L'ordinamento si limita a copiare un po' di kodobase, se avete bisogno di una maggiore velocità, dovrete scriverne uno intelligente, ma basta scriverlo una volta e non preoccupatevi più.Il metodo numero due è simile, solo che l'operatore è completamente esterno e viene passato all'ordinamento. È un po' più complicato ma molto più versatile.
Cioè - dovete usare puntatori a funzioni