【问题标题】:Adding elements to new array Ruby将元素添加到新数组 Ruby
【发布时间】:2023-04-04 03:20:02
【问题描述】:

所以最初我只是在玩旧的“FizzBu​​zz”挑战。对于那些可能不知道这个挑战是什么的人,请允许我解释一下。这个想法是打印出数字1..100,如果该数字可以被3整除,则打印Fizz而不是3;如果数字可以被5整除,则打印Buzz;如果 number 可以被两者整除,则打印 FizzBuzz。这就是我执行挑战的方式:

def super_fizzbuzz(array)  
  array.each do |element|
    if element % 15 == 0 
      puts 'FizzBuzz'
    elsif element % 5 == 0
      puts 'Buzz'
    elsif element % 3 == 0
       puts "Fizz"
    else 
       puts element
    end
  end
end

这将按预期工作。我想要做的是让用户可以放入一个整数数组super_fizzbuzz([3,10,15,19]) 并让它返回带有适当单词替换数字的数组:[Fizz, Buzz, FizzBuzz, 19]。但是,我似乎无法执行此操作。我在下面尝试了以下方法,但它只将第一个答案添加到数组中..

super_array = []
array.each do |element|
  if element % 15 == 0 
    super_array[element] << 'FizzBuzz'
  elsif element % 5 == 0
    super_array << 'Buzz'
  elsif element % 3 == 0
    super_array << "Fizz"
  else
    super_array << element
  end

  return super_array
end

我的想法是创建一个新数组,如果元素可以被其中一个或两个数字整除,则将其放入新数组中,如果不是,则将元素放入数组中.当我运行它时会发生什么,它只会返回一个带有Fizz 的数组。如果我运行第一个代码并将数字放在一个数组中,它会返回:

Fizz
Buzz
FizzBuzz
19
[3, 10, 15, 19]

任何建议将不胜感激。

【问题讨论】:

    标签: arrays ruby fizzbuzz


    【解决方案1】:

    return super_array

    这句话说“停止你正在做的一切并立即返回这个值”

    因此第一次遍历数组,你会得到一个答案……然后点击这个结果,然后返回这个数组结果,而不继续遍历数组的其余部分。

    您可能想要的只是在遍历整个原始数组后才返回新的“super_array”值......所以我会将它移到循环之外,例如:

    super_array = []
    array.each do |element|
      if element % 15 == 0 
        super_array[element] << 'FizzBuzz'
      elsif element % 5 == 0
        super_array << 'Buzz'
      elsif element % 3 == 0
        super_array << "Fizz"
      else
        super_array << element
      end
    end
    return super_array # only return once through the whole array
    

    【讨论】:

    • 我明白了。我删除了return super_array。截至目前,该程序只是返回我放入的数组。[3,10,15,19]。仍在努力,不过很好!
    • 太棒了!刚刚刷新并应用了你所说的,这非常有效!感谢您的回复。
    • 看看我更新的建议 - 你确实需要返回 super_array - 就在循环之后 - 哈哈 - SNAP 我们都在同时输入;)
    • 切换到map会更好。
    【解决方案2】:

    由于提到@mu 太短,这是使用Enumerablemap 方法的主要情况:

    nums = [3, 15, 29, 42, 18, 63, 10]
    
    def to_fizzbuzz
      if self % 15 == 0
        "FizzBuzz"
      elsif self % 5 == 0
        "Buzz"
      elsif self % 3 == 0
        "Fizz"
      else
        self
      end
    end
    
    nums.map(&:to_fizzbuzz) #=> ["Fizz", "FizzBuzz", 29, "Fizz", "Fizz", "Buzz"]
    

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多