我正在设置一些朋友之间的世界杯挑战,并决定练习我的Ruby并编写一个小脚本来自动化这个过程。
问题:
F 211
我写的东西已经足够了,但必须承认是野蛮的力量。但是,在我试图改进我的Ruby时,我承认这段代码并不是最优雅的解决方案,所以我求助于您,专家,为我指明方向。
查看这个gist - https://gist.github.com/91e1f1c392bed8074531可能会更清楚一些。
当前(差的)解决方案
require 'yaml'
@teams = YAML::load(File.open('teams.yaml'))
@players = %w[Player1 Player2 Player3 Player4 Player5 Player6 Player7 Player8]
results = Hash.new
players = @players.sort_by{rand}
players.each_with_index do |p, i|
results[p] = Array[@teams['teir_one'][i]]
end
second = @players.sort_by{rand}
second.each_with_index do |p, i|
results[p] << @teams['teir_two'][i]
end
third = @players.sort_by{rand}
third.each_with_index do |p, i|
results[p] << @teams['teir_three'][i]
end
fourth = @players.sort_by{rand}
fourth.each_with_index do |p, i|
results[p] << @teams['teir_four'][i]
end
p results我确信有一种更好的方法来迭代这些层,并复制@players对象(可能是dup()或clone()?)
所以从一个球迷到另一个,帮帮我。
发布于 2010-06-08 03:03:21
我还在学习Ruby,但这里有一个尝试:
require 'yaml'
tiers = YAML::load(File.open('world_cup_tiers.yaml'))
players = %w[P1 P2 P3 P4 P5 P6 P7 P8]
draws = Hash.new { |h,k| h[k] = [] }
tiers.each do |tier, teams|
players.zip(teams.sort_by{rand}).each do |tuple|
player, team = tuple
draws[player].push(team)
end
end
players.each { |player| puts [player, draws[player]].join(' ') }https://stackoverflow.com/questions/2993934
复制相似问题