Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 一种更优雅的方式?_Ruby - Fatal编程技术网

Ruby 一种更优雅的方式?

Ruby 一种更优雅的方式?,ruby,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

我一直在自言自语,一定有更好的办法,但我现在看不见。。想法

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
i=0;损失=0;赢=0
而我<@array.size
结果=@array[i]。结果
q=0
而q
如果数组中只有0和1,理论上,您可以简单地将所有项的值相加。要计算所有项,请检查该值是否正好是数组中项总数的一半。在不了解更多信息的情况下,很难说是否有更好的方法。之后是否在任何地方使用赢输计数?这是一个立即返回的函数,还是嵌入到一个更大的函数中?所有结果数组的大小是否完全相同?干杯,快乐编码

如果您的数组中只有0和1,理论上您可以简单地将所有项的值相加。要添加i个项,请检查该值是否正好是数组中项总数的一半。在不了解更多信息的情况下,很难说是否有更好的方法。之后是否在任何地方使用赢输计数?这是一个立即返回的函数,还是嵌入到一个更大的函数中?所有结果数组的大小是否完全相同?干杯,快乐编码

您可以使用
数组。每个
而不是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

您可以使用
数组。每个
而不是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.在哪里打印非
0/1
元素?2. <代码>计数
可以在不选择
的情况下使用。初始数组不是一维数组。是
count
优于
select
。至于非0/1答案,我认为OP可以解决这个问题。StackOverflow用于提供建议和指导,而不是编写其他人的代码。17行减少为2行。如果你停止用Ruby语法编写Fortran,而开始编写真正的Ruby,会发生什么令人惊讶的事情。我一直认为“在Ruby中,你需要少10倍的代码”的说法被夸大了,但是当你看到好的Ruby可以比坏的Ruby短10倍时,如果与表达能力更低的语言相比会更有利,我也不会感到惊讶。我当然看到过减少100倍的例子。有了更好的对象模型,这可能会进一步减少。例如,为什么数字存储为字符串而不是数字?为什么它们是数字,而不是,比如说
GameResult
对象?例如,
lose=results.map(&:to_i).count(&:zero?)
@Jörg W Mittag,来自Perl背景,当有人知道如何使用
map
grep
时,我习惯于看到事情崩溃很多,但它永远不会像禅宗一样。Ruby确实变得像禅宗,这就是我真正喜欢它的地方。在哪里打印非
0/1
元素?2. <代码>计数
可以在不选择
的情况下使用。初始数组不是一维数组。是
count
优于
select
。至于非0/1答案,我认为OP可以解决这个问题。StackOverflow用于提供建议和指导,而不是编写其他人的代码。17行减少为2行。如果你停止用Ruby语法编写Fortran,而开始编写真正的Ruby,会发生什么令人惊讶的事情。我一直认为“在Ruby中,你需要少10倍的代码”的说法被夸大了,但是当你看到好的Ruby可以比坏的Ruby短10倍时,如果与表达能力更低的语言相比会更有利,我也不会感到惊讶。我当然看到过减少100倍的例子。有了更好的对象模型,这可能会进一步减少。例如,为什么数字存储为字符串而不是数字?为什么它们是数字,而不是,比如说
GameResult
对象?例如,
lose=results.map(&:to_i).count(&:zero?)
@Jörg W Mittag,来自Perl背景,当有人知道如何使用
map
grep
时,我习惯于看到事情崩溃很多,但它永远不会像禅宗一样。Ruby确实变得像禅宗,这就是我真正喜欢它的地方。
win, lose = results.partition {|r| r.to_i == 1}.map(&:size)