我想设计一个行为类似于数组的类,但也允许我将一组数据与另一组数据分开,以便某些操作仅作用于另一组数据。有什么好方法可以做到这一点?
我的设计是将初始数据集存储在一个数组中,并且添加到此对象的任何新元素都在不同的数组中单独跟踪(称为“额外”数据)。
从这个类的对象中添加和删除项目只会对新元素进行操作,而任何类型的搜索操作都将在初始元素和新元素的组合上执行。
此对象中的元素索引是两个数组串联中的元素索引,因此如果初始数据中有 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
等。