[英]iterating over a multidimensional array to grab specific values ruby
我正在使用 Bandsintown api 根據用戶在我的網站上關注的藝術家以及用戶所在的位置來獲取即將舉行的音樂會日期。 現在我在迭代作為響應返回的多維數據數組時遇到了麻煩。
目標
遍歷數組數組,然后獲取藝術家的姓名以將其顯示在我的視圖中。
我可以使用控制器中的以下代碼獲取我想要的數據:
class CalendarController < ApplicationController
require 'uri'
def index
@user = current_user
@hash_version_array = []
@user.follows.each do |follow|
response = HTTParty.get("http://api.bandsintown.com/artists/#{URI.escape(follow.artist_name)}/events/search.json?api_version=2.0&app_id=el_proyecto_de_la_musica&location=use_geoip")
@hash_version = JSON.parse(response.body)
@hash_version_array << @hash_version
end
@hash_version_array
end
def show
end
end
上面的代碼在我的 @hash_version_array 中產生以下結果(點擊這里查看結果,更容易通過 github 上的要點顯示)
我在嘗試遍歷 @hash_version_array 以獲取每個藝術家的名字時卡住了。
嘗試 1
[9] pry(#<CalendarController>)> @hash_version_array.each do |sub_array|
[9] pry(#<CalendarController>)* sub_array.each do |artist|
[9] pry(#<CalendarController>)* artist["artists"]["name"]
[9] pry(#<CalendarController>)* end
[9] pry(#<CalendarController>)* end
結果是
TypeError: no implicit conversion of String into Integer
from (pry):96:in `[]'
嘗試 2
[8] pry(#<CalendarController>)> @hash_version_array.each do |sub_array|
[8] pry(#<CalendarController>)* sub_array.each do |artist|
[8] pry(#<CalendarController>)* artist["artists"].each do |artist|
[8] pry(#<CalendarController>)* artist["name"]
[8] pry(#<CalendarController>)* end
[8] pry(#<CalendarController>)* end
[8] pry(#<CalendarController>)* end
結果與我為@hash_version_array 獲得的值相同
要獲取藝術家的姓名,您必須通過以下結構獲取它:
artist[0]["artists"][0]["name"]
我會把它留給你來使代碼更健壯。
哈希是一個類似字典的唯一鍵及其值的集合
hash = {my_key: my_value}
所以如果你想獲得一個value
只需使用hash['my_key']
docs
hash.each do |key,value|
key['my_key']
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.