Swift中的数组与字典搜索性能

时间:2017-11-01 15:55:38

标签: arrays swift performance dictionary

我认为这可能是一个简单的答案,但我想我会快速检查......

我们假设我在代码中的不同位置向数组添加Ints,然后我想查找某个数组是否包含某个Int ..

var array = [Int]()

array.append(2)
array.append(4)
array.append(5)
array.append(7)

if array.contains(7) { print("There's a 7 alright") } 

这比我创建字典更重要吗?

var dictionary = [Int:Int]()

dictionary[7] = 7

if dictionary[7] != nil { print("There's a value for key 7")}

显然有这样的原因,你可能想要消除重复相同数字条目的可能性......但我也可以用Set做到这一点..我' m主要是想知道dictionary[key] vs array.contains(value)

的表现

感谢您的时间

2 个答案:

答案 0 :(得分:8)

一般来说,searching提供常量,即O(1),访问,这意味着Array如果存在值并且更新它比使用Dictionary更快,这取决于update table1 a inner join table2 b on a.id = b.id set a.desc = b.desc where a.desc is null 实施时可以是O(n)。如果这些是你需要优化的东西,那么var normalizedDate = new Date(Date.now()).toISOString(); 是一个不错的选择。但是,由于字典强制使用键的唯一性,因此无法在同一个键下插入多个值。

根据这个问题,我建议你阅读Ray Wenderlich's Collection Data Structures,以便更全面地了解数据结构,而不是我在这里提供的。

答案 1 :(得分:2)

我做了一些抽样!

我编辑了你的代码,以便打印语句为空。

我运行代码1.000.000次。每次我测量分别访问字典和数组所需的时间。然后我减去了arrTime(arrTime - dictTime)的dictTime并且每次都保存了这个数字。

一旦完成,我就取了结果的平均值。

结果是:23150。意味着超过1.000.000尝试阵列更快地访问23150 nanoSec。 最大差异为2426737,最小值为-5711121。

以下是图表上的结果: enter image description here enter image description here