这样做更优雅的方式?

Ski*_*zit 0 ruby

我一直对自己说,一定有更好的方法,但我现在看不到它......想法?

i = 0; lose = 0; win = 0
while i < @array.size
  results = @array[i].results
  q = 0
  while q < results.size
    if results[q].to_i == 0 then
      lose += 1
    elsif results[q].to_i == 1 then
      win += 1
    else
      puts results[q]
      puts "false"
    end
    q += 1
  end
  i+=1
end
if win == lose then
  puts "true"
else
  puts "false"
end
Run Code Online (Sandbox Code Playgroud)

Mat*_*eer 5

您可以使用array.each而不是while循环.

您可以使用array.count而不是手动检查每个数组:

lose = results.count { |r| r.to_i == 0 }
win = results.count { |r| r.to_i == 1 }

# or possibly if the array can only contain wins and losses
win = results.count - lose
Run Code Online (Sandbox Code Playgroud)

  • 17行减少到2.如果你停止用Ruby语法编写Fortran并开始编写实际的Ruby,会发生什么.我一直认为"在Ruby中你需要少10倍的代码"声称被夸大了,但当你看到*good*Ruby可以比*bad*Ruby短10倍时,如果比较甚至更少,我就不会感到惊讶表达语言会更有利.我当然看到减少100倍的例子. (3认同)
  • 使用更好的对象模型,这可能会进一步降低.例如,为什么数字存储为字符串而不是数字?为什么他们的数字*完全*,而不是说,"GameResult"对象?例如`lose = results.map(&:to_i).count(&:zero?)`. (3认同)