gpt4 book ai didi

swift - 如何创建一个排除下限而不是上限的 HalfOpenInterval

转载 作者:行者123 更新时间:2023-11-28 13:06:39 24 4
gpt4 key购买 nike

这是一个范围从0.0到1.0但不包括1.0的区间

var interval = 0.0..<1.0
interval.contains(0.0) //true
interval.contains(0.9999) //true
interval.contains(1.0) //false

我想创建一个范围从 0.0 到 1.0 但不包括 0.0 的间隔

theIntervalIWant.contains(0.0)      //false
theIntervalIWant.contains(0.0001) //true
theIntervalIWant.contains(1.0) //true

这不起作用,因为左值 > 右值(对吗?)

var interval2 = 1.0..<0.0

这行不通,我不知道为什么不行

var theIntervalIWant = 0.0>..1.0 

我错过了什么?

最佳答案

Range Swift 中的 s 是 SequenceType s,这意味着您可以迭代它们,这会带来一些复杂情况。例如,Range 中有多少个元素? 1.3...2.56 ?每一步多少钱?

事实上,在 Swift 中你不能有一个 RangeDouble s:你得到的是..<运算符,是一个 HalfOpenInterval ,这是一种轻量级的类型,主要用于检查其中是否包含某些内容。

制作自己的版本非常简单:

public struct HalfOpenStartInterval<Bound : Comparable> : IntervalType, Equatable, CustomStringConvertible, CustomDebugStringConvertible {
public init(_ start: Bound, _ end: Bound) { (self.start, self.end) = (start, end) }
public let start, end: Bound
public var description: String {
return String(reflecting: start) + ">.." + String(reflecting: end)
}
public var debugDescription: String { return description }
@warn_unused_result
public func contains(x: Bound) -> Bool { return x > start && x <= end }
@warn_unused_result
public func clamp(intervalToClamp: HalfOpenStartInterval<Bound>) -> HalfOpenStartInterval<Bound> {
switch (intervalToClamp.start >= start, intervalToClamp.end <= end) {
case (true, true) : return intervalToClamp
case (false, false): return self
case (true, false) : return HalfOpenStartInterval(min(intervalToClamp.start, end), end)
case (false, true) : return HalfOpenStartInterval(start, max(intervalToClamp.end, start))
}
}
public var isEmpty: Bool { return start == end }
}

public func ==<B : Comparable>(lhs: HalfOpenStartInterval<B>, rhs: HalfOpenStartInterval<B>) -> Bool {
return lhs.start == rhs.start && lhs.end == rhs.end
}

不幸的是,>..运算符是保留的,因此初始化程序有点冗长,但您可以按照以下方式使用它:

let theIntervalIWant = HalfOpenStartInterval(0.0, 1.0)

theIntervalIWant.contains(0.0) //false
theIntervalIWant.contains(0.0001) //true
theIntervalIWant.contains(1.0) //true

关于swift - 如何创建一个排除下限而不是上限的 HalfOpenInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32544465/

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