我想构建一些将保留以便快速搜索的数组.
如果我使用这样的东西:
let dictionary: [Int:Int] = [:]
for i in 0 ..< 10000000 {
    dictionary[i] = 0
}

请问查询:

dictionary[n] == nil

在对数时间内执行?

如果是,对其他类型是否相同:Float,Double,String.

最后,我需要它使用UUID类型,它会工作吗?

Swift的字典用 hash table实现,因此假设一个好的散列算法,查找通常在O(1)时间内完成.因此,在 @rmaddy says中,这意味着密钥的类型主要是无关紧要的 – 唯一真正重要的是它是否具有良好的 hashValue实现,您根本不必担心标准库类型.

哈希表查找的最坏情况时间复杂度(假设最大哈希冲突)取决于哈希表如何解决冲突.在Dictionary的情况下,可以使用两种存储方案,native或Cocoa.

从HashedCollections.swift.gyb开始:

In normal usage,you can expect the backing storage of a Dictionary to be a
NativeStorage.

[…]

Native storage is a hash table with open addressing and linear probing. The
bucket array forms a logical ring (e.g.,a chain can wrap around the end of
buckets array to the beginning of it).

因此,最坏情况的查找时间复杂度是O(n),就好像每个元素具有相同的散列一样,可能必须搜索每个元素以便确定表中是否存在给定元素.

对于Cocoa存储,使用_CocoaDictionaryBuffer包装器来包装NSDictionary.不幸的是,我找不到任何关于它如何实现的文档,尽管它的核心基础对应CFDictionary‘s header file声明:

The access time for a value in the dictionary is guaranteed to be at
worst O(lg N) for any implementation,current and future

(听起来它使用平衡的二叉树来处理碰撞.)

是Swift词典的索引性能?即使是异国风情(UUID)?的更多相关文章

  1. ios – 订阅来自CBC特性的通知不起作用

    现在控制台输出到这里看起来像这样:嘿!它说updateNotification是假的.它来自哪里?为什么,这是我对setNotify的回调…我告诉它要通知!让我们在println的行中设置一个断点并检查错误对象:好的,所以这让我没有想法.我无法找到有关该错误代码的相关线索.自从我尝试为之前发现的特征设置通知以来,我无法理解描述本身,因此它必须存在,对吧?此外,在Android上似乎可以订阅通知,所以我想我可以排除设备的问题……有关这方面的任何线索都非常感谢!

  2. ios – 为什么NSManagedObjectID会发生变化?

    我不确定这个问题的格式对这个网站是否有用.基本上,有没有人知道什么使得Apple确保在每次将数据保存到持久存储时NSManagedobjectID发生变化的设计决策?我最大的问题是为什么提供临时的managedobjectID.它有什么意义吗?解决方法我有点困惑为什么你一直说NSManagedobjectID特别是UUID.URI表示可能具有与UUID格式类似的外观,但我没有在文档中看到它表示“NSManagedobjectID是UUID”.为什么Apple以这种方式设计它超出了StackOverflow

  3. ios – 修复ARC中潜在的内存泄漏

    以下单例类帮助器方法可能会导致保留周期.在静态分析器中获取警告:“在线路上分配的对象的潜在泄漏……”我确实尝试过使用ivaruuid__weak但是当我分析时仍会出现警告.谢谢像这样在课堂上被召唤:解决方法这会删除警告吗?

  4. ios – 如何从核心蓝牙设备读取信息

    >如何阅读蓝牙设备的其他信息?

  5. ios – 在开发过程中应该如何使用identifierForVendor?

    解决方法在模拟器中构建和运行时,这个值将会改变.在真实的设备上,只有当用户从设备中删除所有应用并重新安装应用时,才会更改.如果您希望模拟器应用程序在开发期间使用一致的标识符,您可以定义该UUID,并将其用于模拟器构建:请注意,您需要用真实的UUID字符串替换SOME-STATIC-UUID-STRING.

  6. ios – 通过UUID编写CBC特征

    我试图用CoreBluetooth写一个特定的,已知的特征.我觉得这应该是可能的,因为我使用了一个德州仪器BLE实用程序,您可以在连接的外设上选择一个“写值”操作,只需输入特征UUID和您要编写的值,并且执行没有问题.据我了解,为了做到这一点,我必须打电话配置为具有正确的UUID的CBC特征对象.我已经尝试使用正确的UUID进行CBMutableCharacteristic,甚至正确的权限,我知道

  7. ios – 扫描特定CBUUID时,Core Bluetooth无法找到外围设备

    似乎这个问题被“回答”了here,但没有任何代码来表明他们做了不同的事情,我不得不问一个新问题.我有自己的代码具有相同的行为,在OSX上使用CoreBluetooth的CBCentralManager扫描特定的CBUUID并没有发现一个iOS设备充当CBPeripheralManager的外围设备(除非它及其服务先前已被发现).为了查看我的代码是否有问题,我下载了Apple’ssamplecode

  8. 如何在不使用登录系统的情况下识别唯一用户(iOS)

    我可以从设备获得的任何类型,而无需用户填写任何字段.解决方法您可以尝试使用存储在用户的iCloud中的键值存储中的一些唯一随机字符串.因此,当用户第一次启动您的应用时,您会发现他的iCloud没有存储任何值,因此您生成并存储它.当用户下次启动应用程序时,您将看到此值,并将采取相应措施.更重要的是,即使用户将重新安装您的应用程序或将重置设备,您仍然可以在他的iCloud中按值识别用户.

  9. iBeaconswift

    随着这一技术的发展,苹果在2013年WWDC大会上,苹果推出iBeacon技术。该技术允许开发人员开发能够使用iBeacon硬件传感器的iOS应用程序,来为相应的应用程序提供更加精准的位置信息。2014年WWDC大会上,苹果表示,对iBeacon技术进行了改善,借助该技术,应用程序现在能够跟踪到用户所在的楼层的精确位置信息。iBeacon的工作方式是Transmitter-Receiver,即基站-接收机模式的。这里列举个iBeacon的使用场景:在房屋中介中使用。

  10. Swift中的集合类数据结构

    在那种情况下,你将会需要一种基本的集合类数据结构。继续学习,你将会比较成熟的Cocoa数据结构与对应的纯Swift结构的性能。常见iOS数据结构iOS中三种最常用的数据结构是arrays,dictionaries和sets。除了在Swift和Objective-C中旧的Foundation框架中的数据结构,现在又有了新的仅支持Swift版本的数据结构与语言紧密结合在一起。Swift数组是同质的,意味着每一个Swift数组都只包含一种类型的对象。

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部