0

とをfoo持つセットをループしていますstarting_postionsize

if ! foo.position.nil?
    @foo_top = foo.position + foo.size - 1
    @occupied_array = (foo.position..@foo_top)
  end

現在、各ループで配列を再割り当てしていることがわかります。私の最終的な目標は、すべての範囲を組み合わせて Fixnum の配列にすることです。これにより、比較を行うことができます。

私はただ:@occupied_array += (foo.position..@foo_top)そして@occupied_array.to_a後で?

ありがとう

4

2 に答える 2

0

私があなたを正しく理解していれば、Fooそれぞれが開始点と長さで整数の範囲を表すオブジェクトの配列を持っています。そして、すべてのオブジェクトがカバーするすべての値を表す単一の整数配列を生成したいとしFooます。

それが本当なら、次のようなことを試してください。

Foo = Struct.new(:position, :size)
all_the_foos = [Foo.new(10,3), Foo.new(3,3), Foo.new(15,5)]
p all_the_foos.flat_map { |f| (f.position...(f.position+f.size)).to_a }.uniq.sort

#=> [3, 4, 5, 10, 11, 12, 15, 16, 17, 18, 19]

#uniqまたはが必要かどうかわからない場合#sortは、必要に応じて削除してください。

于 2013-05-10T03:44:27.927 に答える