У мене є хеш масивів координат таких локацій:
cities = {
"l10"=> [41.84828634806966,-87.61184692382812],
"l11"=> [41.86772008597142,-87.63931274414062],
"l12"=> [41.88510316124205,-87.60498046875],
"l13"=>[41.84930932360913,-87.62420654296875]
}
Щоб отримати доступ до другого значення в першому масиві, я спробував:
puts cities[0][1][1]
Я хочу, щоб це було надруковано -87.61184692382812
, але це не робить "т. Це дає мені помилку.
Я намагаюся перебрати хеш. Доступ до нього за допомогою
puts cities["l10"][1]
не працює. Але
puts cities[0][1][1]
працював, коли я перетворював його в масив.
Відповіді:
1 для відповіді № 1Ось один із способів отримати доступ до другого значення першого ключа вашого хеша:
cities.values.first[1]
# => -87.61184692382812
Це отримує значення вашого першого ключа (у цьому випадку це перший масив у хеші), а потім отримує за індексом другий елемент цього масиву.
4 для відповіді № 2
Це можна зробити, якщо ви створили свій хеш-масив, інакше для першого доступу вам доведеться використовувати ключ (ну добре, навіть 0 може бути ключовим, але його немає у вашому хеші)
cities.to_a[0][1][1]
=> -87.61184692382812
cities["l10"][1]
=> -87.61184692382812
0 для відповіді № 3
Використовуйте Hash # dig на хешах
Хеш не індексується, тому що це не такгарантовано замовлено (хоча прагматично, останні впровадження МРТ підтримує порядок вставки). Натомість вам потрібно шукати за ключем, а потім індексувати у масив, що зберігається там як значення. В останніх версіях із підтримкою для Хеш # копати, ви можете використовувати наступний синтаксис:
cities.dig "l10", 1
#=> -87.61184692382812
Крім того, ви можете перетворити об'єкт Hash в масив масивів, а потім індексувати так, як ви намагаєтесь зробити в оригінальній публікації. Наприклад:
cities.to_a[0][1][1]
#=> -87.61184692382812