Swift 的 String.count 的 BigO 是什么?

2023-11-25

当 swift 使用时String.count is it:

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

or

O(1)其中 swift 之前已经存储了该数组的大小并简单地访问它。


绝对是O(n)。来自斯威夫特书:

因此,如果不迭代字符串以确定其扩展字素簇边界,则无法计算字符串中的字符数。如果您正在使用特别长的字符串值,请注意count属性必须迭代整个字符串中的 Unicode 标量才能确定该字符串的字符。

这有一些影响,其中最大的是整数下标(即str[5])无法通过标准库获得。在内部,String使用 ASCII 或 UTF-16 编码(从 Swift 5 开始,它使用仅限 UTF-8)。如果字符串仅使用 ASCII 字符,则count can be O(1)但 ASCII 只有 127 个字符,因此请将此视为例外而不是规则。

NSString另一方面,始终使用 UTF-16,因此访问其length is O(1)。还要记住NSString.length != String.count(尝试带有表情符号的字符串,您就会看到)。

至于你的第二个问题,它不缓存count以供后续调用。每次致电count是这样O(n),即使字符串没有改变。中的代码基础回购协议也证实了这一点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 的 String.count 的 BigO 是什么? 的相关文章

  • Xcode 10 / iOS 12 中不遵守锚点约束

    昨天这一切都在 Xcode 9 和 iOS 11 下运行 但是 更新到 Xcode 10 和 iOS 12 后 该视图不再显示 我正在视图中显示视频 今天我能听到但看不到视频 我检查了框架 发现它为零 这解释了问题 但是 与之前的版本相比没
  • Java 中是否可以覆盖对象数组的“toString”?

    Java 中是否可以覆盖对象数组的 toString 例如 假设我创建了一个简单的类 User 哪个类别并不重要 因为这是一个普遍问题 是否有可能 一旦客户端创建了User 数组和客户端使用System out print array 它不
  • ScrollView 内的 SwiftUI 列表

    我想将列表放在 ScrollView 中 以便可以一起滚动列表行和标题 但我发现 ScrollView 中的 List 不起作用 它什么也没显示 我应该同时使用它们 我应该使用 ScrollView 这样当我滚动行时 我可以使标题 图像或文
  • SwiftUI 中的计算 (NSObject) 属性不会更新视图

    所以 我想要一个Text它根据我的 CoreData 模型的内容更改其内容 为此 我在 Xcode beta 4 中使用了计算属性 但它似乎不再起作用了 这是一个错误还是还有其他我没有看到的问题 我真正遇到的问题是我的视图 和计算的属性 似
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 如何在 Swift 中生成随机数?

    我意识到 Swift 书提供了随机数生成器的实现 最佳实践是复制并粘贴此实现吗 或者有一个库可以做到这一点 我们现在可以使用吗 斯威夫特 4 2 Xcode 10 附带的 Swift 4 2 为许多数据类型引入了新的易于使用的随机函数 您只
  • 现在我们有了 std::array C 风格的数组还有什么用途呢?

    std array远远优于 C 数组 即使我想与遗留代码进行互操作 我也可以使用std array data 我有什么理由想要一个老式的阵列吗 除非我错过了一些东西 我没有太密切地关注标准中的最新变化 C 风格数组的大部分用法仍然保留 st
  • 无法将项目添加到 UIView xib 内的 UICollectionView

    客观的 我想将我的 BusinessViewTableHeader UIView 作为 tableView 标题 tableView tableHeaderView BusinessViewTableHeader instanceFromN
  • PHP 字节数组转 Base64(来自 Mssql 的字节数组)

    我在表上使用 Mssql 和图像 例如 0xFFD8FFE000104A46494 我觉得是这样的字节数组 我想用 PHP 将其更改为图像 我试试这个 img src 但图像不显示 代码演示 http sandbox onlinephpfu
  • PHP 数组的最大键大小是多少?

    我正在生成关联数组 键值是 1 n 列的字符串连接 会回来咬我的钥匙有最大长度吗 如果是这样 我可能会停下来并采取不同的做法 它似乎仅受脚本内存限制的限制 快速测试后我得到了 128mb 的密钥 没问题 ini set memory lim
  • GCDAsyncSocket 多个连接不会接受来自多个套接字的数据

    我正在尝试编写一个同时连接到多个套接字的应用程序 当连接新套接字时 我在从旧套接字接收数据时遇到问题 最主要的是委托没有被先前连接的套接字激活 这是我的总体计划 var struct serverlist Create array for
  • 从字符串数组中删除项目

    我有一个包含如下数据的数据库字段 76 60 12 例如 如果我想删除60 我该怎么办 要删除的号码可以是任何地方 如果需要的话 我还需要删除逗号 我正在使用 NET 2 0 我会用逗号分割字符串 删除元素 然后再次连接字符串 希望这一切都
  • 数组查找时间复杂度和。它是如何存储的

    众所周知 通过索引访问数组的时间复杂度是O 1 Java 的文档ArrayList 它由数组支持 对其也有同样的说法get手术 size isEmpty get set iterator 和 listIterator 操作以恒定时间运行 查
  • 指向函数中结构体数组的指针

    我的指针有问题 我想用一个函数读取一个二进制文件 然后在 main c 文件中使用读取的数据 问题是我必须传递一个指向结构数组的指针才能使用 main 中的数据 代码是 define TMOLDEO 8 define TAM 41 stru
  • Xcode 6 无法在 Swift 中自动完成

    我正在尝试导入各种库 但我不记得它们的确切名称 很遗憾Xcode6 使用swift 不会像中那样自动完成它们Xcode5 使用objective c 例如 ALAssetsLibrary MPMediaPlayer etc 我被迫用谷歌搜索
  • Internet Explorer 的数组indexOf 实现

    有很多关于如何将 indexOf 实现放入数组原型中以便它可以在 Internet Explorer 下工作的解决方案 但是我偶然发现了一个问题 到目前为止我所看到的任何地方似乎都没有解决这个问题 使用非常一致的MDC 的实施 https
  • 将函数应用于 3D numpy 数组

    我有一个来自 Image PIL Pillow 对象的 numpy 3D 数组 178 214 235 180 215 236 180 215 235 146 173 194 145 172 193 146 173 194 126 171
  • MPI_Gatherv:根数组中收到的垃圾值

    我正在尝试实施MPI Gatherv函数于C 根据我的程序 包括 root 在内的每个进程都应该创建一个大小等于 进程的等级 1 这将在所有单元格中保持进程的等级 然后这个本地数组被收集到根的 rcv array 中 不知何故 我得到了垃圾
  • 使用std::begin()、std::end()将ArrayXd转换为stl向量,

    在我看来我应该能够使用std begin and std end 转换ArrayXd to std vector
  • 三元运算符结合性

    我无法理解三元运算符上下文中的结合性概念 在大多数情况下 三元运算符如下所示 a b c 在这种情况下 不需要结合性来计算表达式 但有时 三元运算符是嵌套的 a b c d e a b c d e is right associative

随机推荐

  • 哪些 HTML 标签可以与 onClick 一起使用?

    哪些 HTML 标签可以有onclick事件和哪个不能 如果有我无法包含的标签onclick我想知道为什么不活动 onclick func 有什么规则是你应该遵守的吗 所有 HTML 元素都可以有一个onclick属性 See HTML 5
  • 如何更改 vim 中 :next 和 :previous 的顺序?

    在 vim 中 我在缓冲区中打开 3 个文件 A B C 按此顺序 我要返回缓冲区 B 在 B 中打开缓冲区 D e d 所以现在我在 D 中 但是当我使用 bprevious 时 我会转到 C 但我想转到上次访问的缓冲区 B 是否可以更改
  • GitPython:如何在 GitPython 中访问提交中的文件内容

    我是 GitPython 新手 我正在尝试获取提交中文件的内容 我能够从特定提交中获取每个文件 但每次运行该命令时都会收到错误 现在 我知道该文件存在于 GitPython 中 但每次运行程序时 都会收到以下错误 returned non
  • C 编程:仅从 fgets 打印 int

    看到这个main int main void int i int ch char str 512 fgets str sizeof str stdin for i 0 i lt strlen str i if str i 0 str i n
  • 创建对象后检查是否为 null

    我正在创建一个新对象 myobject t new myobject 如果新成功 我应该检查下一行是否有空引用 if null t 或者我可以确定这个对象肯定会不同于 null Thanks 根据C 文档 if new未能成功为新对象实例分
  • 为什么要使用版本控制? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在读一篇博客 作者这样说 除非签入版本控制系统 否则代码就不存在 对你所做的一切使用版本控制 任何版本控制 SVN Git 甚至 CVS 掌握它并使用它 我从未使用过任何类型的版本控制
  • Jenkinsfile 中的动态参数?

    我怎样才能使用Jenkins 动态插件 in a Jenkinsfile 我正在寻找的是 Jenkinsfile 片段 启用Build with ParametersJenkins 工作中的选项 选择后 脚本将填充可使用的列表Dynamic
  • 如何更改Wildfly服务器的IP地址

    我正在准备一个在 Wildfly 上运行的程序以部署到客户站点 并且我需要更改 Wildfly 启动的 IP 地址 例如 如何将 Wildfly 配置为在 127 0 0 2 而不是 127 0 0 1 启动 Update 我在 Windo
  • Ansible:根据 stdout 中的值对异步任务执行 failed_when:

    我正在尝试执行一个failed when 基于来自标准输出的值的异步任务 这是我的任务 name RUN SOME TASK LOCALLY command
  • C#:解决继承类与其基类之间的无效转换异常

    我有两个课程 名为 帖子 和 问题 问题定义为 public class Question Post 我的 Question 类不会覆盖 Post 的任何成员 它只是表达其他一些成员 我想要完成什么 我有一个 Post 类型的对象 其成员已
  • 等待在没有异步包装器的 Chrome 控制台中工作[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我读过 MDN 的等待定义是 await 运算符用于等待 Promise 它只能在异步函数内使用 这在编辑器中有效 但是在 chrome 控制台中 我编写了一个异步函数 然后在全局执行
  • 仅使用 javaScript 对 HTML 中的表格按日期值 desc 列进行排序

    是否可以仅使用 javaScript 来实现排序功能 而不需要任何其他排序库 假设我有一个表 它的第一列具有以下格式的日期值 MM dd yyyy 表还有两列 如下所示 table width 360 border 1 thead tr t
  • 如何在网站中显示类似youtube的视频播放器?

    我正在开发一个网站 我希望上传摄像头录制的视频 并且仅对登录用户可见 但不可下载 我还想编辑视频 让某些图像出现在背景中 并可能记下他们最后一次停止观看视频的时间 也就是说 如果他们在 30 分钟后停止观看 我希望他们下次观看时从 30 0
  • python yaml更新保留顺序和注释

    我使用 python 将密钥插入到 Yaml 中 但我想保留 yaml 中的顺序和注释 This Key is used for identifying Parent tests ParentTest test JOb1 myjob nam
  • 将数据从 Python 发送到 Javascript (JSON)

    我知道 JSON 可以解决这个问题 但我在实现它时遇到了问题 这是我的方法的详细信息 数据是用Python计算的 由于数据大小是动态的 因此我需要使用 JavaScript 为输出创建额外的 HTML 表格行 因此 我需要将数据从 Pyth
  • Selenium 服务器错误:无法创建新服务 chromedriverservice

    我尝试在 Windows 10 计算机上运行 webdriverio 但在尝试运行测试 js 文件时不断遇到相同的问题 所以我运行这个 jar your download directory selenium server standalo
  • 重用WCF服务客户端

    我有一个 WCF Web 服务 充当我的 ASP NET 网页的数据提供程序 在整个网页中 通过自动生成的 ServiceClient 对 Web 服务进行了多次调用 目前 我创建一个新的 ServiceClient 并为每个请求打开它 即
  • R 中的连续引用编号:如果是连续的,则用连字符分隔数字 - 如果不是,则添加逗号

    我想生成连续引用数对于 R 中的数字 如果数字是连续的 则应使用连字符分隔它们 否则 数字之间用逗号分隔 例如 数字1 2 3 5 6 8 9 10 11 and 13应该出来为1 3 5 6 8 11 13 这个问题已经被之前回答过c 并
  • 在 Angular 2 中的 @ngModule 中声明多个组件

    我正在开发一个大型应用程序Angular 2 and ASP netMVC 我的应用程序中有大约 120 个组件 它们都在 ngModule 声明块中声明 NgModule imports CommonModule declarations
  • Swift 的 String.count 的 BigO 是什么?

    当 swift 使用时String count is it O n 每次我们调用它时 我们都会迭代整个字符串以对其进行计数 or O 1 其中 swift 之前已经存储了该数组的大小并简单地访问它 绝对是O n 来自斯威夫特书 因此 如果不