Robię trochę gimnastyki Scala, gdzie mam Seq[T]
, w której staram się znaleźć element "najmniejszy". To co mam teraz zrobić:scala - Min/max z Opcją [T] dla ewentualnie pustego Seq?
val leastOrNone = seq.reduceOption { (best, current) =>
if (current.something < best.something) current
else best
}
To działa dobrze, ale nie jestem całkiem zadowolony - to trochę długo taka prosta sprawa, a I don't care much for "if"s. Korzystanie minBy
byłby znacznie bardziej eleganckie:
val least = seq.minBy(_.something)
... ale min
i minBy
rzucać wyjątki, gdy sekwencja jest pusta. Czy istnieje idiomatyczny, bardziej elegancki sposób na znalezienie najmniejszego elementu możliwej pustej listy jako Option
?
możliwe jest również użycie 'seq reduceOption math.min'. Jest to bardziej wydajne, ponieważ nie wymaga niejawnej konwersji. – sschaef
@Antoras dobra myśl, ale uważam, że wszelkie różnice są w praktyce zoptymalizowane - przynajmniej to pokazuje mój mikrobenkmark –