Hi I have searched/Googled around but I''m struggling with the following problem. I am building a Rails 2.3.2 application and one of the requirements is to calculate the median of an array of results. I am using code for calculating the median from the Ruby Cookbook but keep running in to a problem with receiving an error ''LocalJumpError - no block given'' when I attempt to find the median of an array where there are an odd number of members. The example code in my view is as follows: <%= survey_response.median([6,4,5,4,4,2]) %> Then in survey_response.rb model the methods are as follows: 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 The error is caused when the median method refers back to the mean method to get the media of an odd total of items in the array. I just can''t figure out why I get that error or indeed how to fix it - so I''d hugely appreciate any help/guidance/laughing anybody could offer me! Thanks Simon
On Jun 24, 9:59 am, simon180 <oneeightystud...-gM/Ye1E23mwN+BqQ9rBEUg@public.gmane.org> wrote:> The example code in my view is as follows: > > <%= survey_response.median([6,4,5,4,4,2]) %> > Then in survey_response.rb model the methods are as follows: > > def mean(array) > array.inject(array.inject(0) { |sum, x| sum += x } / > array.size.to_f) > endYou''ve got two calls to inject there, but only the inner one has a block. Not sure what the second call to inject should be doing - i don''t think you need it at all. Fred> > 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 >