[解決済み] Swift で 2 つの値の間の数値を「クランプ」する標準的な方法
2023-06-08 04:12:34
質問
与えられた。
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標準ライブラリに何かあるかどうかを知りたいです(そしてSOで文書化します)。
ないかもしれません、そして、もしそうなら、それはまた、私が喜んで受け入れる答えです。
どのように解決するのですか?
スウィフト4/5
の拡張
Comparable/Strideable
と同様に
ClosedRange.clamped(to:_) -> ClosedRange
というように、Swiftの標準ライブラリにある
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のstatic funcとclass funcの違いは何ですか?
-
[解決済み] 2倍値を小数点以下x桁に丸める処理を素早く行う。
-
[解決済み] Swiftで乱数を生成する方法とは?
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み】Swiftの辞書にキーが含まれているかどうかを判断し、その値を取得する。
-
[解決済み】Swiftの`let`と`var`の違いは何ですか?
-
[解決済み] セグメントに数字をキャップする最もエレガントな方法は何ですか?
-
[解決済み】Swift Stringの文字を置換する方法はありますか?
-
[解決済み] 2つのNSDates間のスウィフト日数
-
[解決済み] swiftでデータを16進文字列に変換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Swift の Optional 値 && Optional のアンラップ時に予期せず nil が検出された場合の説明
-
swift 4.0でのdispatch_async,dispatch_afterの使用について
-
[解決済み] Swiftダブルからストリング
-
[解決済み] Swift で UIViewController のサブクラス用のカスタムイニシャライザを作るには?
-
[解決済み] SwiftでNSDatesの秒数の差を整数値で求める。
-
[解決済み] 計算された読み取り専用プロパティとSwiftの関数との比較
-
[解決済み] Swift で型に表示されるテキスト表現を変更するにはどうしたらいいですか?
-
[解決済み] SwiftUIでビューを動的に隠す
-
[解決済み] Swiftのインライン条件?
-
[解決済み] rootViewControllerとアニメーションを入れ替える?