/ / Como ordenar hash por valores numéricos em ruby? (sem converter para array) - ruby, classificação, hash, ordem

Como encomendar hash por valores numéricos em ruby? (sem converter em array) - ruby, ordenação, hash, order

Então, eu tenho um hash: {"spider" => 213, "frog" => 128, "apple" => 812}.

Como posso reorganizar isso para que ele os ordene pelo valor em ordem decrescente sem convertê-lo em uma matriz? Então, mudando isso para {"apple" => 812, "spider" => 213, "frog" => 128} sem transformá-lo em uma matriz. Eu tentei .sort_by, mas isso o converte em uma matriz.

Respostas:

5 para resposta № 1

No Ruby 1.9, "Hashes enumeram seus valores na ordem em que as chaves correspondentes foram inseridas", certifique-se de inseri-los da maneira correta:

Hash[h.sort_by { |_, v| -v }]
#=> > {"apple"=>812, "spider"=>213, "frog"=>128}

2 para resposta № 2

Você precisa classificar o hash em si ou apenas operar seu conteúdo em ordem de classificação? Se o último, esse trecho funcionaria:

myhash.keys.sort.each { |k| .... do something with myhash[k] .... }

A única abordagem que eu posso ver, além de simplesmente preencher o hash na ordem classificada, é usar uma matriz intermediária:

Hash[myhash.sort]

Mas você, como programador, não "vê" oestado intermediário. O uso do método de classificação em um hash converte o hash em uma matriz classificada de matrizes, e o método # [] coage a matriz em um hash. No Ruby-1.9.3, pelo menos.


-1 para resposta № 3

Portanto, a questão não é irrelevante. Mas por que? O que você quer dizer com reordenar? Reordenar no local? Não importa o que você faça, será necessário extrair os valores do hash. Por que você tem medo de matrizes? Você sabia que pequenos hashes agora são implementados como matrizes em Ruby? (Ou será na versão 2.0?) Matz se absteve de adicionar o método de classificação aos hashes de propósito, li seu post sobre este tópico ...