我搜索过/谷歌搜索但我正在努力解决以下问题。
我正在构建一个Rails 2.3.2应用程序,其中一个要求是计算结果数组的中位数。我正在使用代码来计算Ruby Cookbook的中位数,但是当我试图找到一个奇数个成员的数组的中位数时,继续遇到错误'LocalJumpError - no block given'的问题。 / p>
我视图中的示例代码如下:
<%= survey_response.median([6,4,5,4,4,2]) %>
然后在survey_response.rb模型中,方法如下:
def mean(array)
array.inject(array.inject(0) { |sum, x| sum += x } / array.size.to_f)
end
def median(array,already_sorted=false)
return nil if array.empty?
array = array.sort unless already_sorted
m_pos = array.size / 2
return array.size % 2 == 1 ? array[m_pos] : mean(array[m_pos-1..m_pos])
end
当中值方法返回到获取阵列中奇数项目的媒体的均值方法时,会导致错误。我只是无法弄清楚为什么我会得到那个错误或者确实如何解决它 - 所以我非常感谢任何人可以提供给我的任何帮助/指导/笑声!
由于
西蒙
答案 0 :(得分:1)
Lis看起来是因为你在数组中使用了小数索引。尝试更换:
m_pos = array.size / 2
使用:
m_pos =(array.size / 2).ceil
另外,请尝试将平均功能更改为:
def mean(array)
array.inject(0) { |sum, x| sum += x } / array.size.to_f
end
答案 1 :(得分:1)
更好的代码:
def mean(array)
array.inject { |sum, n| sum + n } / array.length.to_f
end
def median(array)
return nil if array.empty?
array.sort!
middle = array.length / 2
(array.length % 2 == 1) ? array[middle] : mean([array[middle-1], array[middle]])
end
puts median([5,11,12,4,8,21]) # => 9.5
答案 2 :(得分:1)
mean
方法看起来非常糟糕。试试这个:
def mean(array) a.inject(0) { |sum,x| sum += x } / a.size.to_f end