【问题标题】:Multiple mapping of arrays within arrays - Ruby [closed]数组中数组的多重映射 - Ruby [关闭]
【发布时间】:2013-06-14 01:25:20
【问题描述】:

我想遍历数组中的数组。

该数组应该包含 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

有人知道映射是怎么回事吗?

【问题讨论】:

  • 举个例子说明你的输出应该是什么样子。

标签: ruby arrays map mapping


【解决方案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

运行它会生成一个由 5 个 Arrays of 5 个 Arrays of 5 个字符串组成的数组,从三个字符串 "BG""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,因为不清楚您是否真的想要设置它们;看起来您只是将它们用作局部变量。

【讨论】:

  • 确实有效。我确实希望设置@map,所以我只是在开头添加了@map =,谢谢!
  • @DarshanComputing 在循环之外(之前)执行 `%w{BG B1 TR}` 效率更高,无论是在内存方面(更少的字符串对象)还是在时间方面。
  • @steenslag 确实如此。我选择了简单和安全。如果这很少被调用,那几乎没有关系。似乎也可以想象/可能需要/有必要拥有单独的 String 对象。 (谁知道他们以后是否需要突变?也许不太可能,但肯定有可能,并且从问题中不清楚。)无论如何,如果这是一个经常调用的方法并且共享 String 对象是 OP 的好点可以接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 1970-01-01
  • 2013-03-21
  • 2014-07-03
  • 2021-08-22
  • 2020-01-31
相关资源
最近更新 更多