Ruby 合作伙伴配对计划不起作用?



我是 ruby 的新手,有这个程序可以接收多个名字并将它们分成两对,然后将奇人随机放入一组。有时它工作得很好,有时它会把多余的人扔到他们自己的数组中,我不知道为什么。我知道有一种更干净的方法可以做到这一点,但我只是想了解代码是如何工作的。例如,它应该返回"Apple"Banana"Orange"作为["Banana","Orange","Apple"],并且大多数时候都会返回,但有时它会给我["香蕉","橙色",]["苹果"]有什么建议吗?

def randomArray
classNames = []
puts "Please enter a list of names to sort"
while true
input = gets.chomp
break if input.empty?
classNames << input
end
classRandom = classNames.shuffle
splitNames = classRandom.each_slice(2).to_a
arrayPos = 0
splitNames.length.times do
if splitNames[arrayPos].length == 2
arrayPos+=1   
else splitNames[arrayPos].length == 1
splitNames.sample << splitNames[arrayPos].pop
arrayPos+=1
end 
end
x = 0
splitNames.length.times do
break if splitNames[x].empty?
puts "Group number #{x+1} is #{splitNames[x]}"
x+=1
end
end
randomArray

你的问题是这样的:splitNames.sample << splitNames[arrayPos].pop

sample可以返回数组的任何元素,包括具有您尝试分配的奇怪人的元素!因此,如果它对该人进行采样,它会将他们从他们的 1 组中删除,然后立即将他们添加回去。

要解决此问题,请利用以下事实:所有组都将成对,或者最后一个组将只有一个人。不要遍历数组,只需检查splitNames[-1]。如果他们独自一人,请将其添加到splitNames[0...-1].sample

最新更新