import Foundation let line = (1 ... 1_000_000).map { $0.description }.joined(separator: " ") func measure(_ body: @escaping () -> Void) -> TimeInterval { let start = Date.timeIntervalSinceReferenceDate for _ in 0 ..< 10 { body() } let end = Date.timeIntervalSinceReferenceDate return (end - start) / 10 } print(measure { let numbers = line.split(separator: " ").map { Int($0)! } print(numbers.count) }, "[s]") print(measure { let numbers = line.split(separator: " ").map { Int(String($0))! } print(numbers.count) }, "[s]") (edited)$ swift -O convert-time.swift 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1.265830397605896 [s] 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 1000000 0.3805763006210327 [s]Substring を直接 Int に変換するよりも String に変換してから Int に変換した方が速い。String を Int のイニシャライザに渡すと Int.init(_: String) が呼ばれ、 Substring を Int のイニシャライザに渡すと Int.init<S: StringProtocol>(_: S, radix: Int = 10) が呼ばれる。extension FixedWidthInteger { ... @inlinable @inline(__always) public init?(_ description: String) { self.init(description, radix: 10) } }Substring の場合は specialize されないから遅い?