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 № 1Aqui 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