使用 indirect enum 或者 class 在 Swift 2 构造基本数据结构

2015-08-24 10:37:01 +08:00
 wezzard
想在 Swift 2 中自己练习写一下基本的数据结构,诸如单向/双向/循环/双向循环链表、 AVL 树、红黑树、 Treap 、 B 树之类的。

本来想利用 Swift 2 的 indirect enum 这个新特性,但是发现由于 enum 都是 value type ,「链表中插入一个元素后返回被插入节点以加速下次插入」的这个 convenience 在非循环链表中变得没有一点卵用了(因为返回的是 value type ,并不是指向被插入节点的 reference ,除非袮返回被插入节点的前一个节点,但是这对于第一个节点而言会返回空值,会引入 optional value handling,而且也不符合直觉)。

而在 self-balancing binary search tree 的几种主流实现中,由于插入和删除后都会自动平衡整个树,所以本身返回被插入节点其实也没甚么卵用;但是也因为 enum 的 associative value 的实质是一个 tuple ,而 tuple 的实质是内存上一段连续储存的数据,与 struct 的本质相同,却又没有 struct 的 per property accessor ,所以每当进行插入、删除操作时,由于改写节点 balance factor ( AVL 树)和涂黑涂红节点(红黑树)会写入整个 tuple ,势必会造成性能下降。

我很怀疑 Apple 引入这个新特性的原因,并且认为这个新特性肯定不是针对用来构造对性能很敏感的基本数据结构的。
1759 次点击
所在节点    iDev
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/215497

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX