Arrays 如何向数组添加舍入
我花了一些时间试图找到一种方法来对数组中的每个元素进行基本操作,例如sum、round等 我没有看到一种内置的方法来实现这一点,所以我在找到“”后尝试创建自己的方法 有人能解释一下为什么我的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) {
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的方式是危险的。但是是的,人们似乎想要这个。