После того, как я не смог найти документацию по этому вопросу или не смог найти эту функцию в исходном коде, я сам проверил это с помощью тестов производительности, как описано ниже.Предполагалось, что O (1) было возможно на основе массива PHP , являющегося O (1).Swifts String.count
функция выглядит как O (n) .
Результаты
![Unit Test Results](https://i.stack.imgur.com/JRrZS.png)
Кэшируется ли count
, когда он вызывался раньше?(нет)
Я также проверил, может ли вызов String.count
один раз кешировать его.Сравнивая результаты, когда count
уже был вызван и когда он был сохранен в переменной, чтобы убедиться, что он не сохраняется до вызова .count
в наших обычных тестах.
![Caching Tests](https://i.stack.imgur.com/bQrrT.png)
Тесты
import XCTest
class CountTests: XCTestCase {
func test100K() {
let testString = String(repeating: "a", count: 100000)
self.measure {
_ = testString.count
}
}
func test1000K() {
let testString = String(repeating: "a", count: 1000000)
self.measure {
_ = testString.count
}
}
func test10000K() {
let testString = String(repeating: "a", count: 10000000)
self.measure {
_ = testString.count
}
}
func test10000KCached() {
let testString = String(repeating: "a", count: 10000000)
_ = testString.count
self.measure {
_ = testString.count
}
}
func test10000KStrong() {
let testString = String(repeating: "a", count: 10000000)
let count = testString.count
self.measure {
_ = count
}
}
}