我一直对自己说,一定有更好的方法,但我现在看不到它......想法?
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
答案 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)