首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么允许CountableRange具有相同的lowerBound和upperBound?

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

Stack Overflow用户
提问于 2017-08-10 09:42:10
回答 2查看 206关注 0票数 1
代码语言:javascript
复制
let range = 3..<3 // lowerBound == upperBound

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

Arrays.swift.gyb

代码语言:javascript
复制
@_inlineable
public mutating func insert(_ newElement: Element, at i: Int) {
    _checkIndex(i)
    self.replaceSubrange(i..<i, with: CollectionOfOne(newElement))
}

当我们写

代码语言:javascript
复制
let range = 5...5 // CountableClosedRange
range.lowerBound // returns 5
range.upperBound // returns 5

这意味着,我们需要一个仅涵盖一个索引的范围,即5

但是当我们写

代码语言:javascript
复制
let range = 5..<5 // CountableRange
range.lowerBound // returns 5
range.upperBound // returns 5

我们该怎么解释?

简单地说,如果range 5...5代表索引5,range 5..<5代表什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-10 10:18:25

In :如果range 5...5代表索引5,range 5..<5代表什么?

5..<5是从位置5开始的空范围。您可以验证它是否为空,其中包括:

代码语言:javascript
复制
print((5..<5).isEmpty)  // true

但请注意:

代码语言:javascript
复制
(5..<5) != (6..<6)

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

正如您在问题中所指出的,空范围对于指定职位可能很有用。在replaceWithSubrange中,它可以用于指定插入值的位置。

示例:

代码语言:javascript
复制
var letters = ["a", "b", "c"]

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

print(letters)

"a“、"x”、"b“、"c”

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

虽然在代码中看不到范围文本(如(5..<5) ),但在for循环中的代码中经常会出现空范围,例如:

代码语言:javascript
复制
for i in 0 ..< array.count {
    // do something with i
}

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

票数 2
EN

Stack Overflow用户

发布于 2017-08-10 10:18:48

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

很简单,空旷的范围。

适用于:

代码语言:javascript
复制
let range = 5..<5

如果您试图检查它是否为空,您应该得到true

代码语言:javascript
复制
range.isEmpty //true

考虑:

代码语言:javascript
复制
let range = 5..<5
let testingArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let value = testingArray[range]

在这种情况下,value将是包含零元素的ArraySlice

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45610049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档