Dane:standardowy sposób „zaciśnięcia” liczbę pomiędzy dwoma wartościami w Swift
let a = 4.2
let b = -1.3
let c = 6.4
Chcę wiedzieć najprostszych, Swiftiest drogę do dociskania tych wartości na danym zakresie, powiedzmy 0...5
, tak że:
a -> 4.2
b -> 0
c -> 5
wiem, że mogę wykonać następujące czynności:
let clamped = min(max(a, 0), 5)
albo coś podobnego:
let clamped = (a < 0) ? 0 : ((a > 5) ? 5 : a)
Ale zastanawiałem się, czy są jakieś inne sposoby, aby to zrobić w Swift w szczególności chcę wiedzieć (oraz dokument na SO, ponieważ nie wydaje się być pytanie o zaciskania numery Swift), czy jest coś w standardowej bibliotece Swift, przeznaczonej specjalnie do tego celu.
Może nie być, a jeśli tak, to także odpowiedź, którą z radością przyjmuję. :)
Fantastyczny! To jest dokładnie ten rodzaj informacji, których szukałem. Chciałbym zobaczyć to zaimplementowane w przyszłych wersjach Swift. –
Jako rodzimy Szwed (alfabet: '..., x, y, z, å, ä, ö'),' "ä" <"z" // true' jest nieco mylący;) w innej notatce, Wymienione przykłady 'clamp' będą musiały być użyte z zewnętrzną nazwą parametru' value' dla przykładu Swift 3, być może warto wspomnieć o tym wyraźnie (lub Xcode naprawi to zapytanie!). – dfri
@dfri: Porównanie łańcuchów i znaków jest * nie * zależne od ustawień narodowych, porównaj http://stackoverflow.com/questions/25713975/what-does-it-mean-that-string-and-character-comparisons-in-swift- are-not-locale. Dodano zewnętrzną nazwę parametru "_", aby przykłady znów działały. Dzięki za opinie! –