ソートされた2つの配列を、ソートされた配列としてマージ(結合)します。
class Array def sorted_merge(ar) (self + ar).sort end end
というのは(むりやりなので)なしです。
class Enumerator def next_be? begin peek rescue StopIteration return false end true end end class Array def sorted_merge(ar) merged = [] enum1 = self.to_enum enum2 = ar.to_enum while enum1.next_be? and enum2.next_be? if enum1.peek < enum2.peek merged << enum1.next else merged << enum2.next end end merged << enum1.next while enum1.next_be? merged << enum2.next while enum2.next_be? merged end end if __FILE__ == $0 p [1, 5, 9, 10, 15].sorted_merge([2, 4, 8, 30]) #=>[1, 2, 4, 5, 8, 9, 10, 15, 30] end
Enumerator#next_be? は仕方なく作りました。次の要素が存在するかどうかを判定するメソッドがないのは、Ruby にしては片手落ちのような気がします。
※参考:
『Rubyによるデザインパターン』p.119