这样做更优雅的方式?

时间:2010-12-01 17:15:04

标签: 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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

f = @array.flatten
puts (f.count('0') == f.count('1'))
puts f-%w{0 1}

答案 2 :(得分:0)

如果数组中只有0和1,理论上只需将所有.to_i条目的值相加,然后检查此值是否恰好是数组中条目总数的一半。如果在不了解更多信息的情况下有更好的方法,很难说。之后的任何地方都会使用输赢计数吗?这是一个立即返回的功能还是嵌入在一个更大的功能中?您的所有结果数组是否完全相同?干杯和快乐的编码!

答案 3 :(得分:0)

根据某些测试将数组拆分为两部分可以使用Enumerable#partition

完成
win, lose = results.partition {|r| r.to_i == 1}.map(&:size)