względu na poniższej liście krotek ...Scala: Jak podsumować listę krotek
val list = List((1, 2), (1, 2), (1, 2))
... jak mogę zsumować wszystkie wartości i uzyskania pojedynczej krotki takiego?
(3, 6)
względu na poniższej liście krotek ...Scala: Jak podsumować listę krotek
val list = List((1, 2), (1, 2), (1, 2))
... jak mogę zsumować wszystkie wartości i uzyskania pojedynczej krotki takiego?
(3, 6)
Metoda foldLeft
. Aby uzyskać więcej informacji, patrz: scaladoc.
scala> val list = List((1, 2), (1, 2), (1, 2))
list: List[(Int, Int)] = List((1,2), (1,2), (1,2))
scala> list.foldLeft((0, 0)) { case ((accA, accB), (a, b)) => (accA + a, accB + b) }
res0: (Int, Int) = (3,6)
Używanie unzip
. Nie tak wydajny jak powyższe rozwiązanie. Być może bardziej czytelny.
scala> list.unzip match { case (l1, l2) => (l1.sum, l2.sum) }
res1: (Int, Int) = (3,6)
Bardzo proste: (list.map(_._1).sum, list.map(_._2).sum)
.
Czy to nie dwa razy przekracza tę listę? Nie jest to wtedy tak skuteczne. – Armin
Należy zauważyć, że jeśli używasz Scalaz, automatycznie otrzymujesz pojedyncze instancje dla krotek, których elementy mają monofoniczne instancje, więc możesz po prostu napisać 'list.suml'. –