Ruby 仅针对特定对象的循环
我正在写一个程序,该程序应该对竞争对手进行排名和排序Ruby 仅针对特定对象的循环,ruby,arrays,Ruby,Arrays,我正在写一个程序,该程序应该对竞争对手进行排名和排序 # Defining class. Also sorts the array elements in ascending order. class Dancer attr_reader :couplenumber attr_reader :scores def initialize(couplenumber,scores) @couplenumber=couplenumber @scores=scores.sort end end # O
# Defining class. Also sorts the array elements in ascending order.
class Dancer
attr_reader :couplenumber
attr_reader :scores
def initialize(couplenumber,scores)
@couplenumber=couplenumber
@scores=scores.sort
end
end
# Opening file, and sorting into array. Also splits with ",".
results = File.open("danceresult.txt", "r+")
dancescores=[]
results.each do |result|
scores = result.split(',').map(&:to_i)
couplenumber = scores.shift
dancescores << Dancer.new(couplenumber, scores)
end
dancescores.each do |dancers|
dancers.scores
# Prints to screen.
puts "Couple No. #{dancers.couplenumber} got "\
"a minimum score of #{dancers.scores[3]} or better. "\
"Their sum is: #{dancers.scores[0..3].inject(:+)}"
end
我想要他们的总和:{dancers.scores[0..3]。inject:+}只接受那些最低分数的人。因此,如果我们有五个竞争者,其中两个最低得分为2,另外三个最低得分为4,那么总和部分应该只考虑最低得分为2的竞争者。是否可以不必重新编写所有代码,如果可以,最简单的方法是什么?首先确定最低分数:
min_score = dancescores.map{|d| d.scores[3]}.min
然后在打印前添加一个条件:
dancescores.each do |dancer|
# Prints to screen if the couple has the min_score
if dancer.scores[3] == min_score
puts "Couple No. #{dancer.couplenumber} got "\
"a minimum score of #{dancer.scores[3]} or better. "\
"Their sum is: #{dancer.scores[0..3].inject(:+)}"
end
end
或者,您可以使用“选择”仅处理具有min_分数的舞者,如下所示:
dancescores.select{|d| d[3] == min_score}.each do |dancer|
puts "Couple No. #{dancer.couplenumber} got "\
"a minimum score of #{dancer.scores[3]} or better. "\
"Their sum is: #{dancer.scores[0..3].inject(:+)}"
end
您不应该显示所有这些代码。相反,请给出一个数组示例,以及您想要的结果。@sawa:我不同意。上下文可能很重要,而且并不总是先验地清楚它是否会很重要。更好地解释所需的输出会很好,但不要在您尝试过的内容的注释中显示代码结果?正确地说,我试图缩短代码。基本上,它从一个文件中加载一组分数。我想对数组中的第四个元素分数进行比较。也就是说,如果一个数组的第四个位置有一个2,而另一个数组的第四个位置有一个2,那么我希望他们计算和。按照现在的方式,它会计算出他们在第四位的得分是否相同的总和。谢谢,这正是我所想的。但是,当直接解析此代码时,我得到了main:objectnamererror的未定义局部变量或方法“all_dancers”。我是否需要将所有舞者更改为包含所有分数的数组的名称,或者如何更改?当您编辑问题时,您将舞者对象数组中的dancescores替换为仅包含分数数组的arr1。这不再有意义,因为分数既没有编号,也没有与之相关联的分数数组。我是在回答你的直接问题,即如何选择得分最低的舞者。返回到以前创建数组的代码版本。我会改变所有的舞者,以符合你原来的问题。