ASORT com array multidimensional de tamanho variável

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

ASORT com array multidimensional de tamanho variável

Mensagem 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.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

ASORT com array multidimensional de tamanho variável

Mensagem 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,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar do usuário
André Corrêa
Usuário Nível 2
Usuário Nível 2
Mensagens: 81
Registrado em: 03 Nov 2015 07:46
Localização: Caraguatatuba/SP

ASORT com array multidimensional de tamanho variável

Mensagem 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.
-- André Corrêa

"Opte por aquilo que faz o seu coração vibrar, apesar de todas as consequências". - Osho
Responder