在Ruby中迭代二维数组,并为每个实例替换一个字符串


  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

我试图永久地改变这个2D数组中的"TR"的每个实例为整数或字符串。我已经尝试使用。map!上面列出的方法运气不好。

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

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

如果数组的每一行都有相同数量的元素(如在您的示例中),您可以将数组转换为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"] ]

Ruby OOP井字哈希/条件/初始化

这可能对你有帮助,但可能不是lol我们不知道如何输出我们的tie函数

最新更新