【发布时间】:2016-10-20 23:47:19
【问题描述】:
在数组中搜索元素时,可以使用.contains() 方法。我想知道它是如何工作的,它是进行 二分搜索 还是 顺序搜索 或完全是别的什么?
【问题讨论】:
-
这应该被视为一个实现细节,但由于它适用于任意(不一定是排序的)数组,因此不能使用二进制搜索。如果你真的很好奇,就去 Swift 源码里看看吧!
在数组中搜索元素时,可以使用.contains() 方法。我想知道它是如何工作的,它是进行 二分搜索 还是 顺序搜索 或完全是别的什么?
【问题讨论】:
contains(_:) 方法在Sequence 上定义(并由协议扩展提供)。 Sequence 对其内容的稳定性不做任何假设,也不提供随机访问,所以它不能做的不仅仅是线性搜索。 Collection 提供随机访问,因此至少可以在其中实现二进制搜索,但要做到这一点,您需要保证内容已排序。
有一个proposal for adding binary search to the Swift Standard Library 是另一个好兆头,表明还没有二分搜索方法。
但是,您可以将Array(其内容已排序)转换为NSArray,并使用this method 进行二分搜索。
【讨论】: