Ruby 如何按特定格式拆分多级数组
我有一个数组如下Ruby 如何按特定格式拆分多级数组,ruby,arrays,Ruby,Arrays,我有一个数组如下 #bad tourney = [ [ [["Armando", "P"], ["Dave", "S"]], [["Richard", "R"], ["Michael", "S"]] ], [ [["Allen", "S"], [&qu
#bad
tourney = [
[
[["Armando", "P"], ["Dave", "S"]],
[["Richard", "R"], ["Michael", "S"]]
],
[
[["Allen", "S"], ["Omer", "P"]],
[["David E.", "R"], ["Richard X.", "P"]]
]
]
我必须实现一个递归的竞赛方法,让每个竞争者互相竞争。只要是2^n,本次比赛就必须增加到任何数字。是否有任何数组方法可以像下面的数组那样将此数组分为两个级别
#good
tourney = [
["Armando", "P"], ["Dave", "S"],
["Richard", "R"], ["Michael", "S"],
["Allen", "S"], ["Omer", "P"],
["David E.", "R"], ["Richard X.", "P"]
]
有了这个,我可以使用每个_片(2)
来让对手彼此对抗
解决了的 下面是我能想到的
def split(array)
return array.flatten(1)
end
def depth_array(a)
return 0 unless a.is_a?(Array)
return 1+depth_array(a[0])
end
def format_array(array)
good = array
while depth_array(good) > 2
good = split(good)
end
end
tourney = [[[["Armando", "P"], ["Dave", "S"]],
[["Richard", "R"], ["Michael", "S"]]],
[[["Allen", "S"], ["Omer", "P"]],
[["David E.", "R"], ["Richard X.", "P"]]]]
tourney2 = [[["Armando", "P"], ["Dave", "S"]],
[["Allen", "S"], ["Omer", "P"]]]
tourney3 = [["Omer", "P"], ["Allen", "S"]]
tourney4 = [[[[["Armando", "P"], ["Armando", "P"]], [["Armando", "P"], ["Armando", "P"]]],
[[["Allen", "S"], ["Allen", "S"]], [["Allen", "S"], ["Allen", "S"]]]],
[[[["Dave", "S"], ["Dave", "S"]], [["Dave", "S"], ["Dave", "S"]]],
[[["David E.", "R"], ["David E.", "R"]], [["David E.", "R"], ["David E.", "R"]]]]]
format_array(tourney4)
像这样的怎么样:
tourney = [[[["Armando", "P"], ["Dave", "S"]],
[["Richard", "R"], ["Michael", "S"]]],
[[["Allen", "S"], ["Omer", "P"]],
[["David E.", "R"], ["Richard X.", "P"]]]]
good = [].tap do |arr|
tourney.flatten.each_slice(2) do |pr|
arr << pr
end
end
puts good.inspect
# output
[["Armando", "P"], ["Dave", "S"], ["Richard", "R"], ["Michael", "S"], ["Allen", "S"], ["Omer", "P"], ["David E.", "R"], ["Richard X.", "P"]]
tourney=[[“Armando”,“P”],[“Dave”,“S”],
[Richard],[R],[Michael],[S],
[Allen]、[S]、[Omer]、[P],
[David E.,“R”],[Richard X.,“P”]]
好=[]点击do | arr|
锦标赛。整平。每片(2)做|
arr锦标赛。展平(2)
将坏阵型变为好阵型。您正在寻找阵型#展平
。。。它可能会走得太远(太平),但它可能会让你走上正确的轨道。这似乎是一个“原始”痴迷的案例。如果“最低级别”对是对象(即[“Allen”,“S”]是数组以外的对象),那么展平将是最简单的方法。我将尝试此方法,但如果说比赛中有16人,我可能必须能够做同样的事情,并且设置方式相同。因此,我必须处理更多的层。由于我必须能够将任意数量的竞争对手置于2的幂下,因此我决定最好将(1)展平,直到阵列的深度等于2,这是我所需的深度。