Прежде всего, вы должны быть уверены, что ваши данные существуют. В этом случае
- Фикс фигурная скобка
- Это лучше сделать ключи Hash, как символов, но не строки. Для строкового ключа вы должны использовать синтаксис
'key' => 'value'
.
Таким образом, вы должны изменить это:
data = [
{"temp": "22", "rain": "0.5"},
{"temp": "30", "rain": "1.5"},
{"temp": "40", "rain": "2.8"}
]
к этому. Вот выход IRB:
?> data = [
?> {temp: "22", rain: "0.5"},
?> {temp: "30", rain: "1.5"},
?> {temp: "40", rain: "2.8"}
>> ]
=> [{:temp=>"22", :rain=>"0.5"}, {:temp=>"30", :rain=>"1.5"}, {:temp=>"40", :rain=>"2.8"}]
Вы получили Array
из Hashes
.
Следующая является map
функция:
puts data.map {|rain, day| rain + day['rain'].to_f}
Это неправильно. Вы должны обратиться каждый элемент массива один за другим:
puts data.map {|i| puts i[:temp] + ' ' + i[:rain] }
Вот i
переменная, которая относится к каждый элемент массива. Каждый элемент - Hash
с :temp
и :rain
ключами.
Теперь вы можете суммировать с inject(0)
:
puts data.inject(0){|rain, day| rain + day[:rain].to_f}
Попробуйте! Удачи!
Литерал, который вы опубликовали ('data') не является синтаксически действительным, исправьте его, чтобы люди могли его скопировать и вставить, чтобы протестировать ваш код. – toro2k
JSON не является собственной структурой данных Ruby. –
С вашим последним * edit *, вы должны получить ** другую ** ошибку. Обновите с фактической ошибкой. –