以数组为参数的函数

时间:2018-12-15 16:49:27

标签: ruby average

如何编写可计算数组平均值的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

4 个答案:

答案 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