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"的所有实例。在这个2D数组中为整数或字符串。我试过使用.map!以上概述的方法运气不佳。任何帮助将不胜感激。
答案 0 :(得分:1)
我将用于更改win_array[0]
(在第一次尝试中)的块传递给双嵌套map!
调用,因此它会扫描每个元素。
win_array.map! { |a| a.map! { |x| x == "TR" ? "1" : x } }
答案 1 :(得分:0)
如果数组的每一行具有相同数量的元素(如示例所示),则可以将数组转换为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 :(得分:-1)
Ruby OOP tic-tac-toe hash / conditional / itiration
这可能会对你有所帮助,但也许不会大声笑 我们无法弄清楚如何输出我们的领带功能。