【问题标题】:Is Swift string count included in string storage? [closed]字符串存储中是否包含 Swift 字符串计数? [关闭]
【发布时间】:2022-01-02 06:03:41
【问题描述】:

我的应用程序涉及对数兆字节的字符串数组进行重复的相等比较。当我添加一个包含每个字符串计数的影子数组时,我(天真地?)惊讶地发现,这种比较变得非常快。如果计数不相等,则字符串不能相等。

我原以为 Swift 编译器可以轻松有效地在内部表示中维护字符串的计数,并在计数不同时短路字符串相等比较。每个字符串的初始创建将提供初始化计数的机会,然后每个操作将知道每个参与者的计数。但似乎并非如此。如果只有一些应用程序会从存储的计数中受益,那么打开它的编译器开关可以帮助他们。

这是一个合理的标准库改进吗?

【问题讨论】:

  • 这其实和编译器没什么关系。
  • 编译器可以提供字符串字面量的计数。
  • 也可以交叉链接相关论坛帖子:forums.swift.org/t/…

标签: swift string count compiler-optimization


【解决方案1】:

String 的问题在于它并不总是以相同的方式存储。有不同类型的存储,要正确比较它们,必须首先将它们转换为相同的表示形式。

在这里查看源代码:StringComparison.swift,我认为您是对的,在检查相等性时应该先比较count

我建议提交一个错误。

【讨论】:

  • (没有投票)问题是检查计数本身就是一个O(n) 操作,所以除非它被缓存,否则计算长度并不比仅仅进行比较快。跨度>
  • @Alexander 我认为 count 总是被存储的,至少从我在源代码中看到的内容来看。见_stringCompareSlow(lhs, 0..<lhs.count, rhs, 0..<rhs.count, expecting: expecting)
猜你喜欢
  • 2012-12-27
  • 1970-01-01
  • 2016-01-25
  • 2019-03-16
  • 2016-01-15
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2017-07-24
相关资源
最近更新 更多