0

我想设计一个行为类似于数组的类,但也允许我将一组数据与另一组数据分开,以便某些操作仅作用于另一组数据。有什么好方法可以做到这一点?

我的设计是将初始数据集存储在一个数组中,并且添加到此对象的任何新元素都在不同的数组中单独跟踪(称为“额外”数据)。

从这个类的对象中添加和删除项目只会对新元素进行操作,而任何类型的搜索操作都将在初始元素和新元素的组合上执行。

此对象中的元素索引是两个数组串联中的元素索引,因此如果初始数据中有 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 回答