如何扩展/子类Array以便为其索引项目?

时间:2016-06-02 01:39:29

标签: ios swift

在当前版本的Swift中,方法indexOf显然是线性时间。如果我的数组很大而且我需要经常调用indexOf,这几乎没用。我们如何将Array子类化为:

  • 每次插入元素时,数组都会在哈希映射中自动将其编入索引
  • 每次删除元素时,都会将其从索引
  • 中删除
  • 当我们稍后尝试找到该元素时,它会立即返回

我想将这个数组用于UITableView。我想过使用字典,但是

  • 订单是否保留?
  • 给定索引可以获取对象吗?
  • 如果我在给定索引处检索对象,它是线性时间还是恒定时间?

我只想使用Array.indexOf的固定常数版本。

1 个答案:

答案 0 :(得分:1)

不要将Array子类化。创建一个同时包含Array和Dictionary作为实例变量的新类。使用数组进行排序,使用字典从项目到数组索引进行映射。您必须编写自己的例程进行插入,查找和删除。如果对键和值使用泛型类型,则该类将来在其他项目中很有用。几年前我在Objective-C项目中做过这个(没有泛型)。

我想的越多,我认为你应该越多地使用树,因为如果你从数组的中间插入或删除项目,你的字典索引将会关闭。树结构将保留两个顺序并允许合理快速查找。