如何编写可计算数组平均值的Ruby函数?如果数组中没有任何元素,则结果应为0。我应该为实现使用一个循环。我是这样开始的,但是我不确定如何使用循环。
a = [1, 2, 3, 4, 5, 6]
def average(a)
sum = 0.0
result = 0.0
if array.length > 0 then
array.each do |item|
sum += item
end
result = sum / array.length
end
return result.to_f
end
答案 0 :(得分:1)
def average(arr, precision=0)
return 0 if arr.empty?
arr.sum.fdiv(arr.size).round(precision)
end
arr = [1,2,3,7]
average(arr) #=> 3
average(arr,2) #=> 3.25
您可以写而不是使用Integer#fdiv
(arr.sum.to_f/arr.size).round(precision)
答案 1 :(得分:0)
我想我们也可以像下面这样简单地写
a = [1, 2, 3, 4, 5, 6]
def average(arr=[])
sum = 0.0
i=0
while(i < arr.length) do
sum += arr[i].to_f
i += 1
end
return ((i==0) ? 0 : (sum / i))
end
我们可以用这种方法循环计算总和。然后取平均值,取i的值,该值将在循环后保留,并让条件运算符返回结果。
它是一个简单的解决方案,尽管可能会出现错误,但我尚未对其进行测试。您可以试试看。希望这会帮助!!
答案 2 :(得分:0)
您可以这样写:
def average(values)
total = 0.0
values.each do |i|
total += i
end
return total / values.length()
end
如果要使用循环,可以按以下方式进行:
def average(values=[])
total = 0.0
for i in values
total += i
end
return total / values.length()
end
如果传递了一个非空数组,它将返回值的平均值。如果传递了空数组,它将返回0.0
。
您可以像这样测试它:
puts average([1, 2, 3, 4, 5]) #=> "3"
puts average([]) #=> "0"
答案 3 :(得分:0)
def average(a)
if a.empty?
0
else
sum = a.inject(0.0){|x, sum| sum += x}
sum / a.size.to_f
end
end