4.2 b -> 0 c -6ren">
gpt4 book ai didi

swift - "clamp"Swift 中两个值之间的数字的标准方法

转载 作者:IT王子 更新时间:2023-10-29 05:00:04 27 4
gpt4 key购买 nike

给定:

let a = 4.2
let b = -1.3
let c = 6.4

我想知道将这些值限制在给定范围内的最简单、最快捷的方法,比如 0...5,这样:

a -> 4.2
b -> 0
c -> 5

我知道我可以做到以下几点:

let clamped = min(max(a, 0), 5)

或者类似的东西:

let clamped = (a < 0) ? 0 : ((a > 5) ? 5 : a)

但我想知道在 Swift 中是否还有其他方法可以做到这一点——特别是,我想知道(并记录在案,因为在 Swift 中似乎没有关于限制数字的问题)是否有是 Swift 标准库中专门用于此目的的任何内容。

可能没有,如果有,这也是我很乐意接受的答案。

最佳答案

swift 4/5

Comparable/Strideable 的扩展类似于标准 Swift 库中的 ClosedRange.clamped(to:_) -> ClosedRange

extension Comparable {
func clamped(to limits: ClosedRange<Self>) -> Self {
return min(max(self, limits.lowerBound), limits.upperBound)
}
}

#if swift(<5.1)
extension Strideable where Stride: SignedInteger {
func clamped(to limits: CountableClosedRange<Self>) -> Self {
return min(max(self, limits.lowerBound), limits.upperBound)
}
}
#endif

用法:

15.clamped(to: 0...10) // returns 10
3.0.clamped(to: 0.0...10.0) // returns 3.0
"a".clamped(to: "g"..."y") // returns "g"

// this also works (thanks to Strideable extension)
let range: CountableClosedRange<Int> = 0...10
15.clamped(to: range) // returns 10

关于swift - "clamp"Swift 中两个值之间的数字的标准方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36110620/

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