/ / Як отримати доступ до елемента масиву всередині хеша в Ruby - масиви, ruby, ruby-hash

Як отримати доступ до елементу масиву усередині хешу в Ruby - масиви, ruby, ruby-hash

У мене є хеш масивів координат таких локацій:

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