2017-03-25 8 views
0

私は反復的なmergesortを実行しようとしています(すでにRubyにソート方法があります)。ことで、これは私がこれまで試したものです言った:in_groups_ofのRuby MergeSortエラー

def merge_sort(array) 
    return array unless array.size > 1 

    merge_size = 2 

    loop do 
    offset = 0 
    array.in_groups_of(merge_size) do |sub_array| 
     subs = sub_array.in_groups_of(merge_size/2) 
     sub_array.size.times do |i| 
     next if i + offset >= array.size 
     if(subs[0].empty? || subs[0].first.nil?) 
      array[i + offset] = subs[1].shift; next 
     end 
     if(subs[1].empty? || subs[1].first.nil?) 
      array[i + offset] = subs[0].shift; next 
     end 

     array[i + offset] = (subs[0].first < subs[1].first) ? subs[0].shift : subs[1].shift 
     end 
     offset += sub_array.size 
    end 
    break if merge_size > array.size 
    merge_size *= 2 
    end 
    array 
end 

私は私のプログラムを実行すると、それはすべてのオブジェクトに入った後、私はエラーを取得する: 'block in merge_sort': undefined method 'in_groups_of' for #<Array:0x0000002c0db20> (NoMethodError)誰かがそれを修正する方法を教えてもらえますか?私はそれが規則的なルビーではなくレールの一部であるかもしれないような何かを読んだ。どのように私はレールなしでRubyを修正することができますか?

答えて

0

実際には、それはRailsの一部であるactive_support宝石の一部です。 Rubyのマニュアルhttp://ruby-doc.org/core-2.4.1/とRailsドキュメントhttp://api.rubyonrails.org/

宝石全体や必要な部分だけを要求することができます。たとえば、require 'active_support/core_ext/array'

もっと簡単な方法は、ruby each_sliceメソッドを使用することです。