0

我想通过一个数组中的一个数组,其中包含数组。

该数组应包含 5 个数组,并且在每个数组中还有 5 个数组,数字的生成很好,但是当我遍历每个数组以将它们与其他东西映射时,我只得到一个包含 5 个的数组里面的数组。

  def random_map
    @row = []
    @col = []
    @map = []
    5.times do |row|
      5.times do |col|
        @c = rand(3)
        @d = [@c]
        @col << @d
      end
      @row << @col
      @col = []
    end
    @map << @row
    @map.map! do |row|
      row.map! do |col|
        col.map! do |element|
          case(element[0])
          when 0
            element[0] = "BG"
          when 1
            element[0] = "B1"
          when 2
            element[0] = "TR"
          end
        end
      end
    end
  end

有谁知道映射是怎么回事?

4

1 回答 1

1

我不是积极的,但我认为这就是你想要做的:

def random_map
  Array.new(5) do
    Array.new(5) do
      Array.new(5) do
        %w{BG B1 TR}.sample
      end
    end
  end
end

"BG"运行它会生成一个 Array of 5 Arrays of 5 Arrays of 5 Strings,从三个字符串、"B1"和中随机选择"TR"

random_map
# => [[["B1", "BG", "BG", "B1", "B1"],
       ["B1", "B1", "BG", "TR", "B1"],
       ["B1", "B1", "TR", "TR", "TR"],
       ["B1", "TR", "TR", "BG", "B1"],
       ["BG", "TR", "BG", "TR", "TR"]],
      [["B1", "TR", "TR", "BG", "TR"],
       ["BG", "B1", "TR", "BG", "BG"],
       ["B1", "B1", "BG", "TR", "BG"],
       ["BG", "BG", "TR", "B1", "B1"],
       ["B1", "BG", "BG", "BG", "BG"]],
      [["B1", "BG", "BG", "B1", "TR"],
       ["BG", "BG", "B1", "B1", "TR"],
       ["B1", "BG", "B1", "TR", "TR"],
       ["BG", "TR", "B1", "B1", "BG"],
       ["TR", "TR", "BG", "TR", "B1"]],
      [["BG", "B1", "BG", "BG", "BG"],
       ["B1", "B1", "TR", "TR", "B1"],
       ["BG", "B1", "TR", "B1", "TR"],
       ["TR", "TR", "TR", "BG", "B1"],
       ["TR", "B1", "BG", "TR", "BG"]],
      [["B1", "B1", "BG", "BG", "TR"],
       ["TR", "TR", "B1", "BG", "BG"],
       ["TR", "BG", "B1", "BG", "TR"],
       ["BG", "B1", "TR", "BG", "TR"],
       ["B1", "TR", "BG", "B1", "B1"]]]

我特别不使用实例变量@row, @col, @map, @c, 或者@d因为不清楚您是否真的想要设置它们;看起来您只是将它们用作局部变量。

于 2013-06-18T00:05:45.487 回答