2

一个关于多维数组的 Ruby 练习说,each访问多维数组的内部元素需要两个方法实例。以下:

x = [[1,2],[3,4],[5,6]]
x.each do |a|
  a.each do |b|
    puts b
  end
end

应该返回:

# 1
# 2
# 3
# 4
# 5
# 6

但是,没有必要使用两种each方法。如果我只是这样做

x.each { |a| puts a }

我得到相同的结果。似乎each已经有一个实例进入了多维数组的内部级别。

在那种情况下,我将如何访问第一级?换句话说,我将如何获得以下内容?

# [1,2]
# [3,4]
# [5,6]
4

3 回答 3

3

Ruby 中有三种不同的打印函数。让我们在 Ruby 提示符下试一试:

> puts [1,2]
1
2
=> nil

> p [1,2]
[1, 2]
=> [1, 2]

> print [1,2]
[1, 2]=> nil

如果你不熟悉irb,胖箭头后面的表达式=>就是语句的返回值。

于 2013-03-03T15:54:01.973 回答
1

此外,如果你只是

puts x

你会得到完全相同的结果。这是因为puts以特殊方式处理数组。它枚举所有元素并单独调用puts它们。(正如你想象的那样,这是递归的)。

这将大致获得您想要的输出:

x.each {|a| p a}

或者

x.each {|a| puts a.inspect }

输出

# >> [1, 2]
# >> [3, 4]
# >> [5, 6]
于 2013-03-03T15:55:37.160 回答
0
x.each { |a| puts a }

这将对 x 数组的每个元素调用 puts。

这和做的一样:

puts [1,2]
puts [3,4]
puts [5,6]

puts on an array 会像你看到的那样格式化它。

于 2013-03-03T15:54:45.380 回答