2014-01-23 1 views
0

OK людей ... Я мог бы использовать некоторую помощь в получении медианы массива в рубинеМедиана массива в Ruby, не плавающий

Вот мой код:

def median(array) 
    array.sort! # sort the array 
    elements = array.count # count the elements in the array 
    center = elements/2 # find the center of the array 
    elements.even? ? (array[center] + array[center+1])/2 : array[center] # if elements are even take both the center numbers of array and divide in half, if odd...get the center number 
end 

Просто не уверено, где для применения .to_f, так как он не возвращает ничего, что нужно для float.

Благодаря

+0

вы пробовали? '(array [center] .to_f + array [center + 1] .to_f)/2: array [center]' –

+0

Не нужно использовать 'to_f', просто разделите на' 2.0' –

+0

Выяснил это с помощью кучи помощи от всех ... thanks.https: //gist.github.com/jrosaaen/8573539 – Joshua

ответ

0

я понял, ты решил свою собственную проблему уже, но эта версия немного чище и безопаснее:

def median(array) 
    raise ArgumentError, 'Cannot find the median on an empty array' if array.size == 0 
    sorted = array.sort 
    midpoint, remainder = sorted.length.divmod(2) 
    if remainder == 0 # even count, average middle two 
    sorted[midpoint-1,2].inject(:+)/2.0 
    else 
    sorted[midpoint] 
    end 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^