/ / Como acessar um elemento de matriz dentro de um hash em Ruby - arrays, ruby, ruby-hash

Como acessar um elemento de matriz dentro de um hash em Ruby - arrays, ruby, ruby-hash

Eu tenho um hash de matrizes de coordenadas de locais como este:

cities = {
"l10"=> [41.84828634806966,-87.61184692382812],
"l11"=> [41.86772008597142,-87.63931274414062],
"l12"=> [41.88510316124205,-87.60498046875],
"l13"=>[41.84930932360913,-87.62420654296875]
}

Para acessar o segundo valor no primeiro array, tentei:

puts cities[0][1][1]

Eu quero imprimir -87.61184692382812, mas isso não acontece. Isso me dá um erro.


Eu estou tentando iterar sobre o hash. Acessando-o usando

puts cities["l10"][1]

não funciona. Mas

puts cities[0][1][1]

funcionou quando eu converti em uma matriz.

Respostas:

1 para resposta № 1

Aqui está uma maneira de acessar o segundo valor da primeira chave do seu hash:

cities.values.first[1]
# => -87.61184692382812

Isso busca o valor da sua primeira chave (nesse caso, é a primeira matriz no hash) e recupera, por index, o segundo elemento dessa matriz.


4 para resposta № 2

Você pode fazer isso se você fizer o seu hash uma matriz, caso contrário, para o primeiro acesso você tem que usar uma chave (bem, ok, mesmo 0 pode ser uma chave, mas não está presente no seu hash)

cities.to_a[0][1][1]
=> -87.61184692382812

cities["l10"][1]
=> -87.61184692382812

0 para resposta № 3

Use Hash # dig em Hashes

Um hash não é indexável, porque não égarantida a ser ordenada (embora, de forma pragmática, implementações recentes de MRI mantenham a ordem de inserção). Em vez disso, você precisa procurar por chave e depois indexar no Array armazenado como um valor. Em versões recentes com suporte para Hash # dig, você pode usar a seguinte sintaxe:

cities.dig "l10", 1
#=> -87.61184692382812

Como alternativa, você pode converter o objeto Hash em uma matriz de matrizes e, em seguida, indexar como você está tentando fazer na postagem original. Por exemplo:

cities.to_a[0][1][1]
#=> -87.61184692382812