Sky*_*Bay 3 ruby arrays multidimensional-array
我有一个嵌套数组:
array_name = [
["Alice", "pizza", "soccer"],
["Steve", "sushi", "hockey"],
["Alex", "pasta", "none"]
]
Run Code Online (Sandbox Code Playgroud)
当我inspect在循环中使用时:
array_name.each do |i|
puts i.inspect
end
Run Code Online (Sandbox Code Playgroud)
它输出:
["Alice", "pizza", "soccer"]
["Steve", "sushi", "hockey"]
["Alex", "pasta", "none"]
Run Code Online (Sandbox Code Playgroud)
但是使用puts而是打印每个单独数组中的每个元素:
array_name.each do |i|
puts i
end
Run Code Online (Sandbox Code Playgroud)
输出:
Alice
pizza
soccer
Steve
sushi
hockey
Alex
pasta
none
Run Code Online (Sandbox Code Playgroud)
为什么array_name.inspect像上面一样输出整个数组?
我读过,inspect试图打印编码版本.那么,我不知道为什么以下显示与上面第二个代码相同的输出:
array_name.each do |i|
i.each do |sub_i|
puts sub_i
end
end
Run Code Online (Sandbox Code Playgroud)
输出:
Alice
pizza
soccer
Steve
sushi
hockey
Alex
pasta
none
Run Code Online (Sandbox Code Playgroud)
上面的第二个和第三个代码给出了相同的输出,它不是数组,而是每个数组中的实际元素.为什么是这样?
实际上,这就是方法放置的方式.来自文档:
如果使用数组参数调用,则将每个元素写入新行.每个不是字符串或数组的给定对象将通过调用其to_s方法进行转换.如果不带参数调用,则输出一个换行符.
另一方面,pRuby中的方法:
对于每个对象,直接将obj.inspect后跟换行符写入程序的标准输出.
以下代码将打印您期望的结果:
array_name.each do |i|
p i
end
Run Code Online (Sandbox Code Playgroud)