0

配列のように動作するクラスを設計したいのですが、特定の操作が他のセットのデータに対してのみ作用するように、データのセットを別のセットから分離することもできます。これを行う良い方法は何ですか?

私の設計では、データの初期セットを 1 つの配列に格納し、このオブジェクトに追加された新しい要素は別の配列で個別に追跡されます (「追加」データと呼ばれます)。

このクラスのオブジェクトに対するアイテムの追加と削除は、新しい要素に対してのみ実行されますが、あらゆる種類の検索操作は、初期要素と新しい要素の組み合わせに対して実行されます。

このオブジェクトの要素のインデックスは、2 つの配列を連結した要素のインデックスであるため、初期データに 3 つの要素があり、余分な配列に 4 つの要素がある場合、余分な配列の最初の要素は 3 のインデックスを返します。 、初期配列の最初の要素はインデックス 0 を返します。

説明のために、これはコードでどのように見えるかです

class MyClass

  def initialize(base_data)
    @base_elements = base_data # this is an array
    @extra_elements = []       # this stores the "new" data
  end

  def add(elem)
    @extra_elements << elem
  end

  def delete(elem)
    @extra_elements << elem
  end

  def all_elements
    @base_elements.concat(@extra_elements)
  end

  def find(elem)
    all_elements.find( ... )
  end

  def index (elem)
    all_elements.index( ... )
  end
end

理想的には、これはEnumerator、 などで定義されているeachすべてのメソッドをサポートする必要がありますinject

4

1 に答える 1

0

いくつかの変更を求めていることに基づいて、ほとんどそこにいます。

class MyClass
  include Enumerable

  def initialize(base_data)
    @base_elements = base_data # this is an array
    @extra_elements = []       # this stores the "new" data
  end

  def add(elem)
    @extra_elements << elem
  end

  def delete(elem)
    @extra_elements.delete(elem)
  end

  def all_elements
    @base_elements.concat(@extra_elements)
  end

  def index (elem)
    all_elements.index( ... )
  end

  def each(&block)
    all_elements.each(&block)
  end
end
于 2013-07-13T17:46:21.597 に答える