【问题标题】:Ruby partner pairing program not working?Ruby 合作伙伴配对计划不起作用?
【发布时间】:2017-07-21 20:16:04
【问题描述】:

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

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

【问题讨论】:

    标签: arrays ruby


    【解决方案1】:

    你的问题是这样的:splitNames.sample &lt;&lt; splitNames[arrayPos].pop

    sample 可以返回数组的任何 元素,包括包含您要分配的奇怪人的元素!因此,如果它对那个人进行采样,它会将他们从他们的 1 组中删除,然后将他们重新添加回来。

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

    【讨论】:

    • 噢!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多