Swift区间类型
Swift区间类型

Swift区间类型

在 Swift 里:

Range<Bound> 表示左闭右开区间 [lowerBound, upperBound)
ClosedRange<Bound> 表示闭区间 [lowerBound, upperBound]

其中 Bound 必须遵循 Comparable 协议。

例如:

0...12  // 闭区间,0,1....,12
0..<12  // 半开区间,0,1...,11
array[0...] // 单边区域,从 0 到数组末尾
...5    // 不指定起点/终点,小于 5

可以通过区间运算符对数组进行切片或条件判断。

常用属性

1、lowerBound

区间起点,Bound类型。

let r = 1..<5      // Range<Int>
r.lowerBound       // 1

适用于 Range、ClosedRange、PartialRange 等。

2、upperBound

区间终点非包含元素,Bound类型。

let r = 1..<5
r.upperBound       // 5

注意:upperBound 是左闭右开区间的“右边界”,不包含在区间内。

而在闭区间中(ClosedRange),upperBound则包含在区间中:

let cr = 1...5
cr.upperBound       // 5

3、isEmpty

区间长度是否为 0。

let r = 2..<2
r.isEmpty   // true

闭区间通常不为空,除非 lowerBound > upperBound。

4、contains(_:)

判断某个元素是否在区间内。

let r = 1..<5
r.contains(3)    // true
r.contains(5)    // false

对闭区间(ClosedRange)来讲:

let cr = 1...5
cr.contains(5)   // true

5、clamped(to:)

把当前区间限制到另一个区间内。

let r1 = 1..<10
let r2 = 5..<15
let r3 = r1.clamped(to: r2)   // 5..<10

扩展属性/方法

如果区间类型的 Bound 是 Strideable(比如 Int、Double),可以使用:

1、count:元素个数。

let r = 1..<5
r.count   // 4

2、reversed():反向迭代区间。

for i in (1..<5).reversed() {
    print(i)   // 4 3 2 1
}

3、stride(by:)(结合 stride):

for i in stride(from: 1, to: 10, by: 2) {
    print(i)   // 1, 3, 5, 7, 9
}

总结

左闭右开区间(Range)/闭区间(ClosedRange)的核心属性是 lowerBound 和 upperBound,其他都是围绕“判断元素是否在区间内”或“迭代区间”来操作的。

相关文章

1、Swift区间运算符

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注