Arrays 如何向数组添加舍入

Arrays 如何向数组添加舍入,arrays,ruby,Arrays,Ruby,我花了一些时间试图找到一种方法来对数组中的每个元素进行基本操作,例如sum、round等 我没有看到一种内置的方法来实现这一点,所以我在找到“”后尝试创建自己的方法 有人能解释一下为什么我的round方法不起作用吗 class Array def sum inject(nil) { |sum, x| sum ? sum + x : x } end def mean sum / size end def round(p) inject(nil) {

我花了一些时间试图找到一种方法来对数组中的每个元素进行基本操作,例如sum、round等

我没有看到一种内置的方法来实现这一点,所以我在找到“”后尝试创建自己的方法

有人能解释一下为什么我的
round
方法不起作用吗

class Array
  def sum
    inject(nil) { |sum, x| sum ? sum + x : x }
  end

  def mean
    sum / size
  end

  def round(p)
    inject(nil) { |x| (x * 10 ^ (p-1)).floor / 10 ^ (p - 1) }
  end   
end

puts [1.1234, 1.45656, 1.546567, 1.4577887].mean
puts [1.1234, 1.45656, 1.546567, 1.4577887].round(6)

您需要以下内容

class Array
  def sum
    inject(:+)
  end

  def mean
    sum / size.to_f
  end

  def round(p)
    map { |n| n.round(p) }
  end 
end

puts [1.1234, 1.45656, 1.546567, 1.4577887].mean
1.3960789249999999

puts [1.1234, 1.45656, 1.546567, 1.4577887].round(6)
1.1234
1.45656
1.546567
1.457789

请注意,当数组仅包含整数时,需要使用
sum.to_f
(或
size.to_f
)。如果
arr.sum=3
arr.size=2
sum/size=“1
,而
sum/size.to_f=“1.5

您需要以下内容

class Array
  def sum
    inject(:+)
  end

  def mean
    sum / size.to_f
  end

  def round(p)
    map { |n| n.round(p) }
  end 
end

puts [1.1234, 1.45656, 1.546567, 1.4577887].mean
1.3960789249999999

puts [1.1234, 1.45656, 1.546567, 1.4577887].round(6)
1.1234
1.45656
1.546567
1.457789
请注意,当数组仅包含整数时,需要使用
sum.to_f
(或
size.to_f
)。如果
arr.sum=3
arr.size=2
sum/size=“1
,而
sum/size.to_f=“1.5

要回答问题的“为什么”部分,您的实施中有三个问题:

  • 概念:
    inject
    用于获取一堆东西并将它们组合成一个东西。在这里,你有一些东西,并希望并列相同数量的其他东西。执行此操作的方法是
    map

    [1, 2, 3].inject(:+) # => 6
    [-1, 2, -3].map(&:abs) # => [1, 2, 3]
    
  • 语法:
    ^
    是一种,而不是一种权力。要执行此操作,操作员是
    **

  • 基础数学:让我们通过尝试将数字四舍五入
    1.77
    1个小数点来检查是否正确: (17.7).地板/10=1.7

  • 要回答问题的“为什么”部分,您的实施中有三个问题:

  • 概念:
    inject
    用于获取一堆东西并将它们组合成一个东西。在这里,你有一些东西,并希望并列相同数量的其他东西。执行此操作的方法是
    map

    [1, 2, 3].inject(:+) # => 6
    [-1, 2, -3].map(&:abs) # => [1, 2, 3]
    
  • 语法:
    ^
    是一种,而不是一种权力。要执行此操作,操作员是
    **

  • 基础数学:让我们通过尝试将数字四舍五入
    1.77
    1个小数点来检查是否正确: (17.7).地板/10=1.7


  • 答案很好——你知道为什么这不是标准的ruby功能吗?这不是一个标准的ruby功能,因为
    Array
    是不确定元素类型的。你将如何定义<代码> [4,'Hello,NIL,Auth.New(:admin)]。和/>代码?我很欣赏GRIE,但是你可以考虑在选择之前等待更长的时间(比如至少两个小时)。快速选择可能会阻碍其他答案,并可能使那些仍在准备答案的答案短路。@mudasobwa,@ndn是的,我意识到了这个变化:)我回答了“为什么它还没有实现”的问题。在我个人看来,这种将更多像魔法一样的Rails引入Ruby的方式是危险的。但是,是的,人们似乎想要这个。答案很好——你知道为什么这不是标准的ruby功能吗?这不是一个标准的ruby功能,因为
    Array
    是不确定元素类型的。你将如何定义<代码> [4,'Hello,NIL,Auth.New(:admin)]。和/>代码?我很欣赏GRIE,但是你可以考虑在选择之前等待更长的时间(比如至少两个小时)。快速选择可能会阻碍其他答案,并可能使那些仍在准备答案的答案短路。@mudasobwa,@ndn是的,我意识到了这个变化:)我回答了“为什么它还没有实现”的问题。在我个人看来,这种将更多像魔法一样的Rails引入Ruby的方式是危险的。但是是的,人们似乎想要这个。