【问题标题】:multiply array using each on ruby在红宝石上使用每个数组相乘
【发布时间】:2015-09-28 07:49:14
【问题描述】:

我一直被这个问题困扰。如有任何帮助,我将不胜感激。

说明 "在odds数组上使用.each方法打印出数组中每一项的值的两倍。换句话说,将每一项乘以2。

确保使用 print 而不是 puts,这样你的输出就会出现在一行上。”

我的代码

odds = [1,3,5,7,9]

odds.each do |placeholder|
    odds *= 2
    print odds
end

【问题讨论】:

  • 打印placeholder,而不是odds
  • 尝试插入puts "placeholder=#{placeholder]"作为块的第一行。

标签: arrays ruby each


【解决方案1】:
odds = [1,3,5,7,9]
odds.each do |placeholder|
  odds *= 2
  print odds
end

你这里#each的用法是正确的,但是记住#each接收的是一个::Enumerable对象,传入的块使用变量placeholder::Array中的值封装在当前点迭代。因此,您需要使用placeholder 来检索您想要加倍的值,而不是odds,因为odds 仍然是::Enumerable 函数#each 中的::Array

这段代码可以写成如下两行:

odds = [1,3,5,7,9]
odds.each {|placeholder| print placeholder * 2 }

严格来说,#map 将是执行此操作的首选方法。

【讨论】:

  • 为什么你(和其他发帖人)认为map 是首选?我不同意。 [1,3,5,7,9].map{|placeholder| print placeholder * 2 } 创建了一个无用的 nils 数组,它被 nothing 引用。 map 的全部目的是创建一个数组——但在这种情况下,没有人要求一个数组。 each 很好。
  • @steenslag 尽管print *odds.map{|x| x * 2} 会很好地工作,尽管我确实同意,因为 OP 说使用 each 尽管我猜技术上几乎所有 Enumerable 方法都使用每个
  • ruby-doc.org/core-2.2.0/Array.html 参考 ruby​​ 文档中的 ::Array #map 函数。
【解决方案2】:
odds.each { |x| print "#{x*2}" }

红宝石方式:

print odds.map {|x| x*2}.join(' ')

【讨论】:

  • map 不需要 eacheach 将创建一个Enumerator,这将允许map 工作,因为Enumerator 包含Enumberable 模块,但由于Array 还包含Enumerable,因此只需map 就足够了。
  • 太棒了。 :) 更好
【解决方案3】:

您试图在代码的每次迭代中将 Array odds 乘以 2。 do |placeholder| 的意思是'对于数组中的每一项,给我一个元素并称之为placeholder'。

所以你需要使用placeholder *= 2

但是,由于您没有更改 odds 中的原始值,因此您可以将内部块缩短为 print placeholder * 2

此外,虽然问题可能是使用:each,但:map 更符合您正在做的事情。使用 map 可以让你像这样将每个元素加倍:

odds.map{ |i| i*2 }

【讨论】:

    【解决方案4】:

    odds 是你的数组。 placeholder 表示数组中的一个值。如果没有明确地为您提供答案,您要做的是将值乘以 2,而不是数组本身。

    【讨论】:

      【解决方案5】:

      我已经成功地做到了

      odds = [1,3,5,7,9]
      odds.each do |x|
          x *= 2
          print x
      end
      

      【讨论】:

        猜你喜欢
        • 2019-08-09
        • 2014-03-07
        • 1970-01-01
        • 2019-09-21
        • 2011-07-13
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        • 2020-06-14
        相关资源
        最近更新 更多