我想设计一个行为类似数组的类,但也允许我将一组数据与另一组数据分开,以便某些操作仅对来自另一组的数据起作用。有什么好办法呢?
我的设计是将初始数据集存储在一个数组中,并且添加到此对象的任何新元素将在另一个数组中单独跟踪(称为“额外”数据)。
添加和删除此类对象中的项目仅对新元素进行操作,而对初始元素和新元素的组合将执行任何类型的搜索操作。
此对象中的元素索引是两个数组串联中的元素索引,因此如果初始数据中有3个元素,而额外数组中有4个元素,则额外数组中的第一个元素将返回index为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
等。
答案 0 :(得分: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