【问题标题】:Iterating through a two dimensional array in Ruby and substituting a string for every instance遍历 Ruby 中的二维数组并为每个实例替换一个字符串
【发布时间】:2014-09-24 05:34:16
【问题描述】:
  win_array = [ ["TL", "TM", "TR"], ["ML", "MM", "MR"], ["BL", "BM", "BR"], 
    ["TL", "ML", "BL"], ["TM", "MM", "BM"] , ["TR", "MR", "BR"], 
    ["TL", "MM", "BR"], ["TR", "MM", "BL"] ]


  win_array[0].map! {|x| x == "TR" ? "1" : x } #works for [0] array

  win_array[0..7].map! {|x| x == "TR" ? "1" : x } #doesn't work
  win_array.each.map! {|x| x == "TR" ? "1" : x }  #doesn't work
  win_array.each {|x| x.map! == "TR" ? "1" : x }  #doesn't work

我正在尝试将此二维数组中的每个“TR”实例永久更改为整数或字符串。我曾尝试使用.map!上面概述的方法运气不佳。任何帮助将不胜感激。

【问题讨论】:

  • 这似乎工作win_array.map! { |a| a.map! { |x| x == "TR" ? "1" : x } }
  • 谢谢八月!我也想知道为什么 [0..7].map!不起作用。你知道吗?
  • 首先,Array#[Range] 创建了一个新的Array 对象,所以原来的win_array 没有被修改,其次,你映射了win_array 中的每个Array ,而不是该数组的元素。
  • 太棒了。你一直很有帮助。谢谢。

标签: ruby arrays


【解决方案1】:

如果数组的每一行具有相同数量的元素(如您的示例中所示),您可以将数组转换为 Matrix 对象,应用 Matrix#collect(又名 map),然后转换矩阵返回一个数组(当然,除非将它保存为Matrix 对象以供进一步处理更方便)。

require 'matrix'

win_array = [ ["TL", "TM", "TR"], ["ML", "MM", "MR"], ["BL", "BM", "BR"], 
              ["TL", "ML", "BL"], ["TM", "MM", "BM"], ["TR", "MR", "BR"], 
              ["TL", "MM", "BR"], ["TR", "MM", "BL"] ]

win_array = Matrix[*win_array].map { |e| (e == "TR") ? "1" : e }.to_a
  #=>       [ ["TL", "TM", "1" ], ["ML", "MM", "MR"], ["BL", "BM", "BR"],
  #           ["TL", "ML", "BL"], ["TM", "MM", "BM"], ["1" , "MR", "BR"],
  #           ["TL", "MM", "BR"], ["1" , "MM", "BL"] ]

【讨论】:

    【解决方案2】:

    Ruby OOP tic-tac-toe hash / conditional / itiration

    这可能对您有所帮助,但可能不会大声笑 我们不知道如何输出我们的 tie 函数。

    【讨论】:

      【解决方案3】:

      我将您用来更改 win_array[0](第一次尝试)的块传递给了双嵌套的 map! 调用,因此它会扫描每个元素。

      win_array.map! { |a| a.map! { |x| x == "TR" ? "1" : x } }
      

      【讨论】:

      • map 用于嵌套 (a) 是多余的。
      猜你喜欢
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-16
      相关资源
      最近更新 更多