如何访问哈希值数组中的第一项

Jam*_*ell 4 ruby arrays hash ruby-on-rails

我有一个哈希,其值是一个歌词数组(line1,line2等...)

码:

class Song
    def initialize(lyrics)
       @lyrics = lyrics 
    end
    def get_song_name()
        puts @lyrics.keys
    end
    def get_first_line()
        puts @lyrics.values[0]
    end
end

wasted = Song.new({"Wasted" => ["I like us better when we're wasted",
    "It makes it easier to see"]})

real_world = Song.new("Real World" => ["Straight up what do you want to learn about here", "if i was someone else would this all fall apart"])

wasted.get_song_name()
wasted.get_first_line()
#=>I like us better when we're wasted
#=>It makes it easuer to see
Run Code Online (Sandbox Code Playgroud)

所以当我打电话时wasted.get_first_line,我想让它获取值数组中的第一项.我尝试过@lyrics.values[0],但它会返回歌曲的两行而不是第一行.

我该如何做到这一点?

shi*_*vam 7

您需要了解在上面的代码中@lyrics是一个哈希.以下是您正在做的事情以及它的翻译内容:

@lyrics
# => {"Wasted"=>["I like us better when we're wasted", "It makes it easier to see"]} 


@lyrics.values
# => [["I like us better when we're wasted", "It makes it easier to see"]] 

@lyrics.values[0]
# => ["I like us better when we're wasted", "It makes it easier to see"] 

@lyrics.values[0][0]

# => "I like us better when we're wasted" 
Run Code Online (Sandbox Code Playgroud)

因此,要访问第一行,您需要获取values数组的第一个元素.即

@lyrics.values[0][0]
Run Code Online (Sandbox Code Playgroud)

要么

@lyrics.values.first.first
Run Code Online (Sandbox Code Playgroud)