gpt4 book ai didi

swift - 为什么允许 CountableRange 具有相同的 lowerBound 和 upperBound?

转载 作者:搜寻专家 更新时间:2023-11-01 06:32:11 26 4
gpt4 key购买 nike

let range = 3..<3 // lowerBound == upperBound

Swift 标准库在多个地方使用这种类型的范围,例如在数组 insert(_, at:) 中方法。

Arrays.swift.gyb

@_inlineable
public mutating func insert(_ newElement: Element, at i: Int) {
_checkIndex(i)
self.replaceSubrange(i..<i, with: CollectionOfOne(newElement))
}

当我们写作时

let range = 5...5 // CountableClosedRange
range.lowerBound // returns 5
range.upperBound // returns 5

这意味着,我们想要一个只包含一个索引的范围,即 5

但是当我们写的时候

let range = 5..<5 // CountableRange
range.lowerBound // returns 5
range.upperBound // returns 5

我们如何解释这一点?

简而言之:如果范围5...5代表索引5 ,什么范围 5..<5代表?

最佳答案

In short: If range 5...5 represents index 5, what does range 5..<5 represent?

5..<5从位置 5 开始的空范围。您可以通过以下方式验证它是否为空:

print((5..<5).isEmpty)  // true

但请注意:

(5..<5) != (6..<6)

因为他们从不同的地方开始。

如您在问题中所述,空范围可用于指定位置。在 replaceWithSubrange它可用于指定插入值的位置。

例子:

var letters = ["a", "b", "c"]

letters.replaceSubrange(1..<1, with: ["x", "x", "x"])

print(letters)
["a", "x", "x", "x", "b", "c"]

这告诉replaceSubrange 将计数为 0 的从位置 1 开始的字母范围替换为 ["x", "x", "x"] 。换句话说,在位置 1 之前插入新值


虽然您不会看到范围文字,例如 (5..<5)在代码中很多,空范围确实经常出现在 for 中的代码中循环例如:

for i in 0 ..< array.count {
// do something with i
}

在这种情况下,如果数组为空,则范围将没有值并且 for循环将不会执行。

关于swift - 为什么允许 CountableRange 具有相同的 lowerBound 和 upperBound?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45610049/

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