我有一个包含几个学生的数组。我希望他们随机交叉等级,即每个学生都会对某人进行评分,并由其他人评分(这两个人可能是也可能不是同一个人)。
这是我接近工作的解决方案。这段代码的一个大问题是,如果其他所有人都匹配,那么最后一个人可能必须给自己评分。
我对一个有效且更优雅的解决方案非常感兴趣。
def randomize(student_array)
graders = student_array.dup
gradees = student_array.dup
result = {}
graders.each do |grader|
gradee = grader
while gradee == grader
gradee = gradees.sample
end
result[grader] = gradee
gradees.delete_at(gradees.index(gradee))
end
return result
end
答案 0 :(得分:2)
如果您不必从所有可能性中挑选一个,但从有限的案例中选择一个随机案例,那么这很容易。例如,以下内容将给出匹配:
student_array = %i[a b c d e]
a = student_array.shuffle
[a, a.rotate(1)].transpose.to_h
# => {:b => :e, :e => :d, :d => :a, :a => :c, :c => :b}