如果你创建一个var Range = 0 ... 0,我希望endIndex为零。但实际上是1.
var myRange: Range<Int> = 0...0
print("start Index \(myRange.startIndex) End Index \(myRange.endIndex)")
输出:“开始索引0结束索引1”
如果包含Int类型的索引,我如何质疑Range实例?
答案 0 :(得分:4)
endIndex
实际上并未包含Range
。 Range
为startIndex ..< endIndex
。因此,对于您的示例,0...0
存储为0..<1
,这意味着相同的事情。
对于 Swift 1.2 ,您可以使用全局函数contains
来检查Int
是否包含Range
:
var myRange: Range<Int> = 0...0
let i: Int = 1
if contains(myRange, i) {
println("yes")
} else {
println("no") // prints "no"
}
Swift 2.0 :
var myRange: Range<Int> = 0...0
let i: Int = 1
if myRange.contains(i) {
print("yes")
} else {
print("no") // prints "no"
}
答案 1 :(得分:0)
也许您可以参考Half-Open Range Operator
var myRange: Range<Int> = 0..<0
输出:&#34;开始索引0结束索引0&#34;
半开放范围运算符(a..<b)
定义从a到b的范围,但不包括b。封闭范围运算符(a...b)
最终将转为(a..<b+1)
答案 2 :(得分:0)
由于Range
也是一个集合,因此您可以使用其minElement()
和maxElement()
方法,这些方法将返回正确的索引,并且会关闭正在关闭的范围(...
)或半开(..<
)。
因此下面的代码将按预期输出零:
let range: Range<Int> = 0...0
let min = range.minElement()!
let max = range.maxElement()!
print("min=\(min), max=\(max)")
// Output: "min=0, max=0"
注意:这两种方法都有O(elements.count)
复杂度,可能不适合某些情况。