gpt4 book ai didi

arrays - Swift 中的 ClosedInterval 到 [String]

转载 作者:可可西里 更新时间:2023-11-01 01:35:26 24 4
gpt4 key购买 nike

为什么会这样:

let i = 1...100
let s = [Int](i)

产量

[1, 2, 3, ..., 100]

但是

let i = "a"..."z"
let s = [String](i)

产量

Cannot invoke initializer for type '[String]' with an argument list of type '(ClosedInterval<String>)'

i.contains("b")

产量

true

最佳答案

Int符合 ForwardIndexType , 因此在

let i = 1...100

...是运营商

public func ...<Pos : ForwardIndexType where Pos : Comparable>(start: Pos, end: Pos) -> Range<Pos>

结果是 Range<Int> .范围是集合和序列:可以枚举范围的元素并从中创建一个数组。

但是StringCharacter不符合 ForwardIndexType :没有从一个字符串或字符前进到下一个的方法。因此在

let i = "a"..."z"

...是运营商

public func ...<Bound : Comparable>(start: Bound, end: Bound) -> ClosedInterval<Bound>

结果是 ClosedInterval<String> .您可以检查是否该间隔中包含特定字符串,但您不能枚举它的元素。

"a"..."z"代表所有字符串 s为此 "a" <= s <= "z"根据 Unicode 标准,而不仅仅是 26 个小写字母来自英文字母表,比较例如What does it mean that string and character comparisons in Swift are not locale-sensitive? .例如

let c = i.contains("ä")

产量 true .

在 Swift 3 中,range 和 interval 类型已经重命名并且重组:

"1" ... "100"  // CountableClosedRange<Int>
"a" ... "z" // ClosedRange<String>

如果您打算创建一个包含所有字符的数组然后根据它们在 Unicode 表中的顺序从“a”到“z”你可以枚举 UTF-32代码单元:

let i = UnicodeScalar("a").value ... UnicodeScalar("z").value
let charArray = (i.map { Character(UnicodeScalar($0)) })
// or
let stringArray = (i.map { String(UnicodeScalar($0)) })

结果是

["a", "b", "c", ... , "z"]

作为 Character 的数组或 String 的数组.

关于arrays - Swift 中的 ClosedInterval<String> 到 [String],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com