在Ruby中创建和迭代2d数组

时间:2012-10-13 17:05:19

标签: ruby arrays multidimensional-array

我对Ruby知之甚少,无法找到创建二维数组的方法。任何人都可以提供一些片段或信息来帮助我入门吗?

5 个答案:

答案 0 :(得分:22)

a = [[1, 2], [3, 4]]
a.each do |sub|
  sub.each do |int|
    puts int
  end
end
# Output:
#   1
#   2
#   3
#   4

或:

a = [[1, 2], [3, 4]]
a.each do |(x, y)|
  puts x + y
end
# Output:
#   3
#   7

答案 1 :(得分:12)

irb(main):001:0> a = []
=> []
irb(main):002:0> a1 = [1, 2]
=> [1, 2]
irb(main):003:0> a2 = [3, 4]
=> [3, 4]
irb(main):004:0> a.push a1             
=> [[1, 2]]
irb(main):005:0> a.push a2
=> [[1, 2], [3, 4]]
irb(main):006:0> a
=> [[1, 2], [3, 4]]
irb(main):007:0> a[0]
=> [1, 2]
irb(main):008:0> a[0][1]
=> 2

答案 2 :(得分:10)

创建二维数组的最简单方法如下:

arr1 = Array.new(3) { Array.new(3)}

上面的代码创建了一个包含三行三列的2D数组。

干杯。

答案 3 :(得分:6)

Ruby没有像C那样的二维数组的概念。 Ruby中的数组是动态的 - 这意味着你可以用意志来调整它们的大小。它们可以包含每个“槽”中的任何对象或值 - 包括另一个Array!

在@JunaidKirkire和@simonmenke给出的示例中,您有一个数组,其数组包含其值。您可以使用类似于C的语法访问这些值 - 但您也可以使用一个插槽是一个数组而另一个只是一个数字,一个字符串或一个哈希...

您可能希望通过Ruby教程来更好地了解它的工作原理。我喜欢RubyMonk,但也有其他好的。

答案 4 :(得分:1)

对数组的添加将遵循以下格式[row] x [col]:

arr1 = Array.new(3) { Array.new(3)}
arr1[0][0] = 4
arr1[0][1] = 5
arr1[1][0] = 6
arr1[1][1] = 7
p arr1
=> [[4, 5, nil], [6, 7, nil], [nil, nil, nil]]

第二个约束完全是任意的,因为如果没有它,你可以使用锯齿状数组。取决于需要。

arr1 = Array.new(5) {Array.new()}
arr1[0][0] = 4
arr1[0][1] = 5
arr1[1][0] = 6
arr1[1][1] = 7
p arr1 
=> [[4, 5], [6, 7], [], [], []]

arr1 = Array.new(5) {Array.new()}
arr1[0][0] = 4
arr1[0][1] = 5
arr1[1][0] = 6
arr1[1][1] = 7
arr1[1][2] = 8
arr1[1][5] = 9
p arr1
=> [[4, 5], [6, 7, 8, nil, nil, 9], [], [], []]