Swift 中的Range类型和 Range运算符

发布时间 2023-09-10 16:34:19作者: 漫思

Swift 中的Range类型和 Range运算符

赵邦华IP属地: 广东
0.3312020.10.11 22:50:49字数 574阅读 5,198

Swift中有五个最常用的Range类型:
• ClosedRange: a...b
• Range a..<b
• PartialRangeThrough: ...b
• PartialRangeFrom: a...
• PartialRangeUpTo: ..<b

对应的,有五个Range运算符,用来定义上面的Range类型
• Closed Range Operator: a...b
• Half-Open Range Operator: a..<b
• Prefix Closed Range Operator: …b
• Postfix Closed Range Operator: a…
• Prefix Half-Open Range Operator: ..<b

ClosedRange

ClosedRange类型代表一个闭区间 [a, b]
其声明是:

struct ClosedRange<Bound> where Bound : Comparable

我们可以用 closed range operator (a...b) 创造一个ClosedRange实例

let closedRange: ClosedRange<Double> = 1.2...6.3

我们可以检查一个值是否在一个ClosedRange范围内

closedRange.contains(3.6)
// true

如果一个ClosedRange用整数作为其边界,我们可以把它用在for-in loop中

for i in -1…2 {
    print(i)
}
// -1
// 0
// 1
// 2

Range

Range类型代表一个右半开区间 [a, b),注意这里只能是右边开区间,左边必须是闭区间
其声明是:

struct Range<Bound> where Bound : Comparable

我们可以用 half-open range operator (a..<b)创造一个Range实例

let range: range<Double> = 1.2..<6.3

我们可以检查一个值是否在一个Range范围内

range.contains(3.6)
// true
range.contains(6.3)
// false, 因为上界是开区间

如果一个Range用整数作为其边界,我们可以把它用在for-in loop中

for i in -1..<2 {
    print(i)
}
// -1
// 0
// 1

PartialRangeThrough

PartialRangeThrough 类型代表一个左边界无穷的闭区间 (-infinite, b]
其声明是:

struct PartialRangeThrough<Bound> where Bound : Comparable

我们可以用 prefix closed range operator (…b)创造一个PartialRangeThrough实例

let partialRangeThrough: PartialRangeThrough<Double> = …6.3

我们可以检查一个值是否在一个partialRangeThrough范围内

partialRangeThrough.contains(3.6)
// true
partialRangeThrough.contains(6.3)
// true

如果一个PartialRangeThrough用整数作为其边界,我们可以用它代表一个 collection 类型的索引 (从 0 到上边界)

let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[...3])
// [10, 20, 30, 40]

PartialRangeFrom

PartialRangeFrom 类型代表一个右边界无穷的闭区间 [a, +infinite)
其声明是:

struct PartialRangeFrom<Bound> where Bound : Comparable

我们可以用 postfix closed range operator (a…)创造一个PartialRangeFrom实例

let partialRangeFrom: PartialRangeFrom<Double> = 1.2…

我们可以检查一个值是否在一个PartialRangeFrom范围内

partialRangeFrom(1.2)
// true
partialRangeFrom(6.3)
// true

如果一个PartialRangeFrom用整数作为其边界,我们可以用它代表一个 collection 类型的索引 (从下边界到结束)

let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[3…])
// [40, 50, 60, 70]

PartialRangeUpTo

PartialRangeUpTo 类型代表一个左边界无穷的开区间 (-infinite, b)
其声明是:

struct PartialRangeUpTo<Bound> where Bound : Comparable

我们可以用 prefix half-open range operator (..<b)创造一个PartialRangeUpTo实例

let partialRangeUpTo: PartialRangeUpTo<Double> = ..<6.3

我们可以检查一个值是否在一个PartialRangeUpTo范围内

partialRangeUpTo(1.2)
// true
partialRangeUpTo(6.3)
// false, 因为上界是开区间

如果一个PartialRangeUpTo用整数作为其边界,我们可以用它代表一个 collection 类型的索引 (从0到上边界-1)

let numbers = [10, 20, 30, 40, 50, 60, 70]
print(numbers[..<3])
// [10, 20, 30]
 
最后编辑于 :2020.10.11 23:00:44