当前位置: 首页 > 知识库问答 >
问题:

斯威夫特的弦是什么?伯爵?

姚韬
2023-03-14

当swift使用string.count时:

O(n)其中,每次调用它时,我们都会遍历整个字符串以便对其进行计数

O(1),其中swift以前存储了这个数组的大小,并简单地访问它。

共有1个答案

殳经略
2023-03-14

它肯定是O(n)。来自斯威夫特的书:

因此,如果不遍历字符串以确定其扩展的图形素簇边界,就无法计算字符串中的字符数。如果要处理特别长的字符串值,请注意count属性必须迭代整个字符串中的Unicode标量,以便确定该字符串的字符。

这有一些含义,其中最大的含义是整数订阅(即str[5])在标准库中不可用。在内部,string使用ASCII或UTF-16编码(从Swift 5开始,它只使用UTF-8)。如果字符串只使用ASCII字符,那么count可以是O(1),但是ASCII只有127个字符,所以将此视为例外而不是规则。

至于您的第二个问题,它不会为后续调用缓存count。因此,对count的每次调用都是O(n),即使字符串没有更改。基金会回购中的代码也证实了这一点。

 类似资料:
  • 问题内容: 函数定义中的下划线是什么意思? 例如 我了解在定义函数时,我可以执行以下操作: 然后,我将其称为而不是,即故意隐藏参数名称吗? 问题答案: Swift需要一个约定来说明函数名称是什么,不仅包括函数名称本身(在括号之前),还包括参数的外部名称。约定是名称后跟冒号。因此,这是一个函数声明(在Swift 2.0中): 这是该函数的名称: 但是,在现实生活中,一个或多个参数有可能(实际上)不会

  • 我是Kubernetes的新手,开始阅读文档。通常使用“endpoint”一词,但文档中缺乏明确的定义。 Kubernetes的“终点”是什么?它位于哪里? 我可以想象“endpoint”是单个“节点”的某种接入点,但这只是猜测。

  • 问题内容: 我一直在尝试实现单例,以用作我从网络上传到我的iOS应用的照片的缓存。我在下面的代码中附加了三个变体。我试图使版本2正常工作,但是它导致了我不理解的编译器错误,并希望就我做错的事情寻求帮助。变体1进行缓存,但我不喜欢使用全局变量。变体3并没有进行实际的缓存,我相信这是因为我在赋给var ic = ....的赋值中获得了副本,对吗? 任何反馈和见解将不胜感激。 谢谢Zvi 问题答案: 标

  • 问题内容: 我正在学习快速,并试图理解字典。我已经习惯了PHP,您可能会在其中编写以下内容… 在此示例中,将按以下顺序输出值:1、2、3 我的快速代码看起来像这样… 但是,值以意外的顺序出现。我可以做些干净的事情来保持值的创建顺序,还是不能对字典进行快速排序? 问题答案: 正如已经回答的那样,词典的要点是未排序。Swift(和Objective-C)中有三种类型的集合 数组是项目的有序列表。当项目

  • 问题内容: 要找到第一个,请使用: 我如何找到第二次出现? 问题答案: 项目清单 您可以按照以下步骤在剩余的数组切片中再次搜索元素的索引: 编辑/更新: Xcode 11•Swift 5.1或更高版本 测试:

  • 问题内容: 什么之间的区别,以及何时该使用的呢? 例如,在Python中,如果我想打印字典,我只是,但是现在有2个其他选项。我应该如何以及何时使用它们? 问题答案: 一些区别: vs : 调试应用程序时,该功能在Xcode控制台中打印消息。 这是Swift 2中已删除且不再使用的变体。如果看到正在使用的旧代码,则可以安全地将其替换为。 回到Swift 1.x,没有在打印字符串的末尾添加换行符,而是