首页 > 解决方案 > 有什么方法可以通知编译器数组已排序,以便可以更快地完成搜索?

问题描述

想象一下,我有以下两个数组:

let array1 = [1,4,6,9,12,18]
let array2 = [6,9,4,18,12,1]

现在我想找到的索引9

array1.index(of:9) // 3
array2.index(of:9) // 1

有没有办法告诉编译器“不像array2,你需要一个一个地查找所有索引,array1已经排序,所以你可以节省时间并做一个binarySearch”

也许是这样的:

array1.index(of : 9, isSorted : true)
array2.index(of : 9, isSorted : false)

标签: arraysswiftsortingoptimization

解决方案


没有。但是你可以自己实现它。

原则上,Array可以实现自动管理。它可能有一个isSorted标志,默认情况下为空数组设置,在任何违反排序顺序的操作完成时重置,并在任何时候sort调用设置。然后,任何对排序数据具有更优化实现的函数都可以检查这个标志,根据需要执行优化或通用算法。

但是,我怀疑这种簿记的成本(几乎所有业务都支付)将超过有限的收益(仅由某些业务获得)。


推荐阅读