Мне часто приходится проверять, равно ли много значений и в случае извлечь общее значение. То есть, мне нужна функция, которая будет работать, как следует:Scala: извлечение повторяющегося значения из списка
extract(List()) // None
extract(List(1,2,3)) // None
extract(List(2,2,2)) // Some(2)
Предполагая, что один имеет сутенера, который добавит tailOption
к seqs (это тривиально, чтобы написать одну или есть один в scalaz), одна реализация выглядит
def extract[A](l: Seq[A]): Option[A] = {
def combine(s: A)(r: Seq[A]): Option[A] =
r.foldLeft(Some(s): Option[A]) { (acc, n) => acc flatMap { v =>
if (v == n) Some(v) else None
} }
for {
h <- l.headOption
t <- l.tailOption
res <- combine(h)(t)
} yield res
}
есть ли что-то подобное - возможно, более общий - уже в Scalaz, или какой-нибудь простой способ, чтобы написать это?
Что нужно извлечь (List (2,2,2,3,3)) вернуть? – Jan
он должен возвращать 'None' – Andrea
Так вы в основном хотите знать, если все значения в списке равны? – drexin