Página 1 de 1

ASORT com array multidimensional de tamanho variável

Enviado: 22 Jul 2016 09:24
por André Corrêa
Bom dia,

Estou com uma dúvida quanto ao uso de ASORT com uma matriz cujo tamanho de cada sub-array seja variável.
Suponhamos que cada sub-array de aMatriz possa ter entre 2 e 10 elementos.
Eu quero ordenar pela soma dos elementos de cada sub-array.

Se o tamanho for fixo, é simples:

Código: Selecionar todos

aMatriz := { { 1, 3, 5 }, { 2, 5, 6 }, { 2, 6, 9 } }

ASort(aMatriz, , , { |x, y| x[1]+x[2]+x[3] > y[1]+y[2]+y[3] } )
Mas e se eu não souber quantos elementos existem em cada sub-array de aMatriz?
EX:

Código: Selecionar todos

aMatriz := { { 1, 3 }, { 2, 5 }, { 2, 6 } }

ou  

aMatriz := { { 1, 3, 5, 2 }, { 2, 5, 6, 9 }, { 2, 6, 9, 8 } }
O codeblock de ASort aceita FOR...NEXT?

Obrigado.

ASORT com array multidimensional de tamanho variável

Enviado: 22 Jul 2016 09:53
por Toledo
Amigo, uma saída seria usar uma função para somar os elementos da sub-array, ai dentro desta função você poderia usar FOR... NEXT.

Por exemplo:

Código: Selecionar todos

ASort(aMatriz, , , { |x, y| SomaEle(x) > SomaEle(y) } )
...
...
Func SomaEle(xy_)
Local nSoma:=0
For i=1 to Len(xy_)
  nSoma+=xy_[i]
Next
Retu (nSoma)
Não testei, mas acho que vai funcionar.

Abraços,

ASORT com array multidimensional de tamanho variável

Enviado: 22 Jul 2016 10:21
por André Corrêa
Toledo,

Obrigado pelo rápido retorno.

É isso mesmo, utilizando uma função ou método para efetuar a soma, funciona.
Às vezes a solução é simples, mas focamos tanto no problema que não a vemos.

Muito obrigado.