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