Alterar o tipo de variável em um lugar e o compilador mostrará erros nos outros três - alterar o nome do campo. Você pensaria que existem dezenas de estruturas que precisam ser classificadas. Sim, uma estrutura muito provavelmente requer uma classificação.
Não, não definir a tarefa desta maneira
estabeleça a seguinte tarefa: use seu exemplo para ordenar através da estrutura com dezenas de campos por cada campo
seja uma estrutura que contenha todas as propriedades da ordem "quatro" (OrderStoploss(), OrderTakeProfit(), OrderOpenTime()....) - há uma dúzia deles
E reproduzir a ordenação de uma série de tais estruturas por cada campo com seus exemplos? - imho, seu código pesará bastante, e escrevi acima que não será possível reutilizar este código
estabeleça a seguinte tarefa: usando seu exemplo, classifique a estrutura que tem dezenas de campos por cada campo
seja uma estrutura contendo todas as propriedades da ordem "quatro" (OrderStoploss(), OrderTakeProfit(), OrderOpenTime()....) - há uma dúzia deles
E reproduzir a ordenação de uma série de tais estruturas por cada campo com seus exemplos? - imho, seu código pesará bastante. Eu escrevi acima que não será possível usar este código repetidamente.
Um problema do reino da ficção científica, nunca encontrado na prática.
Você pode fazer um campo separado para ordenar por e antes de ordenar, copiar para ele a partir do campo pelo qual você quer ordenar.
Não, é possível usar MQL, da mesma forma que você sugeriu usar SB
Mas o problema será que este código será escrito para uma determinada tarefa
Se dermos um exemplo - o painel terminal com pedidos foi reproduzido como uma janela em MQL, a ordenação foi feita, tudo gira, tudo funciona
E se você quiser usar uma parte do código para exibir o painel de "otimização" do testador, você terá uma carga de mudanças. É mais fácil escrever o código do zero, incluindo os tipos, e você vai querer ter nomes de campos legíveis por humanos? - caso contrário você precisa ser o autor de um conhecido "kernel" para ter em mente todos os nomes de identificadores na forma de Abyrwalgh (A Dog's Heart)
Não, é possível usar MQL, da mesma forma que você sugeriu usar SB
mas o problema será que este código será escrito para uma tarefa específica
Se dermos um exemplo, o painel terminal com pedidos foi reproduzido como uma janela em MQL, a ordenação foi feita, tudo gira, tudo funciona
E se você quiser usar uma parte do código para exibir o painel de "otimização" do testador, você terá uma carga de mudanças. É mais fácil escrever o código do zero, incluindo os tipos, e você vai querer ter nomes de campos legíveis por humanos? - caso contrário você precisa ser o autor de um conhecido "kernel" para ter em mente todos os nomes de identificadores na forma de Abyrwalg (A Dog's Heart)
)))
Qualquer coisa que possa ser mal entendida será mal entendida. Não me referia à possibilidade/impossibilidade, mas à necessidade prática da mesma, ou seja, à ocorrência desta tarefa.
Não é minha idéia que para cada estrutura você deve escrever seu próprio Comparativo().
Deixe estar como está, ele tem o direito de ser constante :-) e para diferentes propósitos você pode construir índices
Alguém vai escrever agora ... que é tão inconveniente para mim ... que não somos donas de casa, mas superdesenvolvedores, e devemos usar todas as possibilidades das modernas tecnologias de programação, enquanto uma gama adicional é algo como a Idade Média ...
Embora, pessoalmente, eu goste mais desta opção.
#property copyright"Copyright 2017, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property version"1.00"#property strictstruct SMy{
int x1;
int x2;
};
SMy s[3]={{4,44},{2,22},{3,33}};
double sa[][2];
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart(){
int size=ArraySize(s);
ArrayResize(sa,size);
for(int i=0;i<size;i++){
sa[i][0]=s[i].x1; // поле по которому сортировать
sa[i][1]=i;
}
ArraySort(sa);
Alert("===");
for(int i=0;i<size;i++){
int ii=(int)sa[i][1];
Alert(s[ii].x1," ",s[ii].x2);
}
}
De jeito nenhum: 1) É suficiente inserir o ArrayCopy na compilação condicional, não o ArraySwap. 2) O ArrayCopy precisa ser escrito em um padrão personalizado, uma vez que o padrão não suporta estruturas NonPod. 3) Precisamos de mais uma compilação condicional para o ArrayResize array multi-domínio (a função dá resultados diferentes para diferentes versões MT)
template <typename T>
void ArrayReindex( T &Array[], constdouble &TmpSort[][2] )
{
T TmpArray[];
for (int x = ::ArrayResize(TmpArray, ::ArrayRange(TmpSort, 0)) - 1; x >= 0; x--)
TmpArray[x] = Array[(int)(TmpSort[x][1] + 0.1)];
::ArraySwap(Array, TmpArray);return;
}
// Сортировка массива структур и указателей на объекты по (под-) полю/методу.#define ArraySortStruct(ARRAY, FIELD) \
{ \
double TmpSort[][2]; \
\
for (int x =::ArrayResize(TmpSort, ::ArraySize(ARRAY)) - 1; x >= 0; x--) \
{ \
TmpSort[x][0] = (double)ARRAY[x].FIELD; \
TmpSort[x][1] = x; \
} \
\
::ArraySort(TmpSort); \
::ArrayReindex(ARRAY, TmpSort); \
}
Alterar o tipo de variável em um lugar e o compilador mostrará erros nos outros três - alterar o nome do campo. Você pensaria que existem dezenas de estruturas que precisam ser classificadas. Sim, uma estrutura muito provavelmente requer uma classificação.
Não, não definir a tarefa desta maneira
estabeleça a seguinte tarefa: use seu exemplo para ordenar através da estrutura com dezenas de campos por cada campo
seja uma estrutura que contenha todas as propriedades da ordem "quatro" (OrderStoploss(), OrderTakeProfit(), OrderOpenTime()....) - há uma dúzia deles
E reproduzir a ordenação de uma série de tais estruturas por cada campo com seus exemplos? - imho, seu código pesará bastante, e escrevi acima que não será possível reutilizar este código
Não, não é assim que você deve definir a tarefa.
estabeleça a seguinte tarefa: usando seu exemplo, classifique a estrutura que tem dezenas de campos por cada campo
seja uma estrutura contendo todas as propriedades da ordem "quatro" (OrderStoploss(), OrderTakeProfit(), OrderOpenTime()....) - há uma dúzia deles
E reproduzir a ordenação de uma série de tais estruturas por cada campo com seus exemplos? - imho, seu código pesará bastante. Eu escrevi acima que não será possível usar este código repetidamente.
Um problema do reino da ficção científica, nunca encontrado na prática.
Você pode fazer um campo separado para ordenar por e antes de ordenar, copiar para ele a partir do campo pelo qual você quer ordenar.
No MT 5 funciona sem problemas no MT 4 culpa oArraySwap porque o Mql 4 não o suporta...
Um desafio do reino da ficção.
Não, é possível usar MQL, da mesma forma que você sugeriu usar SB
Mas o problema será que este código será escrito para uma determinada tarefa
Se dermos um exemplo - o painel terminal com pedidos foi reproduzido como uma janela em MQL, a ordenação foi feita, tudo gira, tudo funciona
E se você quiser usar uma parte do código para exibir o painel de "otimização" do testador, você terá uma carga de mudanças. É mais fácil escrever o código do zero, incluindo os tipos, e você vai querer ter nomes de campos legíveis por humanos? - caso contrário você precisa ser o autor de um conhecido "kernel" para ter em mente todos os nomes de identificadores na forma de Abyrwalgh (A Dog's Heart)
)))
Não, é possível usar MQL, da mesma forma que você sugeriu usar SB
mas o problema será que este código será escrito para uma tarefa específica
Se dermos um exemplo, o painel terminal com pedidos foi reproduzido como uma janela em MQL, a ordenação foi feita, tudo gira, tudo funciona
E se você quiser usar uma parte do código para exibir o painel de "otimização" do testador, você terá uma carga de mudanças. É mais fácil escrever o código do zero, incluindo os tipos, e você vai querer ter nomes de campos legíveis por humanos? - caso contrário você precisa ser o autor de um conhecido "kernel" para ter em mente todos os nomes de identificadores na forma de Abyrwalg (A Dog's Heart)
)))
Qualquer coisa que possa ser mal entendida será mal entendida. Não me referia à possibilidade/impossibilidade, mas à necessidade prática da mesma, ou seja, à ocorrência desta tarefa.
Não é minha idéia que para cada estrutura você deve escrever seu próprio Comparativo().
Por que classificar a matriz/vetor de estruturas grossas em diferentes campos?
deixe que ele se mantenha como está, ele tem o direito de ser constante :-) e para diferentes propósitos você pode construir índices
Não é minha idéia escrever uma comparação() diferente para cada estrutura.
É exatamente assim, ou melhor, não sei de outra forma, e este método estará ligado a uma tarefa específica
e o autor quer uma solução universal por 10 libras, bem, vamos esperar e ver se algo se resolve
por que classificar a matriz/vetor de estruturas grossas em diferentes campos?
Deixe estar como está, ele tem o direito de ser constante :-) e para diferentes propósitos você pode construir índices
Alguém vai escrever agora ... que é tão inconveniente para mim ... que não somos donas de casa, mas superdesenvolvedores, e devemos usar todas as possibilidades das modernas tecnologias de programação, enquanto uma gama adicional é algo como a Idade Média ...
Embora, pessoalmente, eu goste mais desta opção.
De jeito nenhum:
1) É suficiente inserir o ArrayCopy na compilação condicional, não o ArraySwap.
2) O ArrayCopy precisa ser escrito em um padrão personalizado, uma vez que o padrão não suporta estruturas NonPod.
3) Precisamos de mais uma compilação condicional para o ArrayResize array multi-domínio (a função dá resultados diferentes para diferentes versões MT)
Não vai:
A resposta não foi para todas as ocasiões. A maioria das pessoas fecha.