对于我的一生,我无法让它在单独的行上打印“爱好”?

Phi*_*obe 0 ruby arrays hash

 people = [\n  {\n    "first_name" => "Robert",\n    "last_name" => "Garcia", \n    "hobbies" => ["basketball", "chess", "phone tag"]\n   },\n  {\n    "first_name" => "Molly",\n    "last_name" => "Barker",\n    "hobbies" => ["programming", "reading", "jogging"]\n   },\n  {\n    "first_name" => "Kelly",\n    "last_name" => "Miller",\n    "hobbies" => ["cricket", "baking", "stamp collecting"]\n   }\n]\n\nindex = 0\nwhile  index < "hobbies".length\n  p people[index]["hobbies"]\n  index += 1\nend\n
Run Code Online (Sandbox Code Playgroud)\n

\xee\xba\xa7

\n

在我参加的课程中,他们希望我不使用该p语句puts,并且希望我将其作为循环运行,我不明白“未定义的方法'[]'”是什么,任何人都可以对此进行一些说明并步行让我尽可能简单地完成它?

\n

Chr*_*ris 5

people您正在尝试根据字符串的长度进行迭代"hobbies"。现在,该字符串的长度为 7,但people数组的长度仅为 3。

您要么想要:

index = 0
while  index < people.length
  p people[index]["hobbies"]
  index += 1
end
Run Code Online (Sandbox Code Playgroud)

或者更好的是只使用该each方法。

people.each do |person|
  p person["hobbies"]
end
Run Code Online (Sandbox Code Playgroud)

当我运行这个时,我看到:

irb(main):028:0> people.each do |person|
irb(main):029:1*   p person["hobbies"]
irb(main):030:1> end
["basketball", "chess", "phone tag"]
["programming", "reading", "jogging"]
["cricket", "baking", "stamp collecting"]
Run Code Online (Sandbox Code Playgroud)

您收到错误的原因可以通过一个非常简单的示例来显示:

irb(main):001:0> a = [2]
=> [2]
irb(main):002:0> a.length
=> 1
irb(main):003:0> a[0]
=> 2
irb(main):004:0> a[1]
=> nil
Run Code Online (Sandbox Code Playgroud)

当我们访问越界索引处的数组时,我们不会收到错误。我们刚刚得到nil。在您的代码中,您尝试使用下标nil,这确实会导致您看到的错误。