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函数