0
Was ist die effizienteste Implementierung, um die Anzahl der einzelnen Elemente in einem Scala-Array zu finden?Finden von Zählern für jedes einzelne Element in einem Scala-Array?
Was ist die effizienteste Implementierung, um die Anzahl der einzelnen Elemente in einem Scala-Array zu finden?Finden von Zählern für jedes einzelne Element in einem Scala-Array?
können Sie es wie folgt tun:
val xs = Array("a", "b", "c", "c", "a", "b", "c", "b", "b", "a")
xs.groupBy(identity).mapValues(_.length)
oder so:
xs.foldLeft(Map[String, Int]().withDefaultValue(0))((acc, x) => acc + (x -> (acc(x) + 1)))
oder könnten Sie interne Veränderlichkeit verwenden Kopieren zu verhindern, wenn Sie effizienter sein wollen:
def countElems[A](xs: Array[A]): Map[A, Int] = {
val result = collection.mutable.Map[A, Int]().withDefaultValue(0)
xs foreach { x => result += (x -> (result(x) + 1)) }
result.toMap // this copies and makes it immutable, O(number of distinct elements)
}
Konnten Sie es mit xs-Parameter vom Typ DataFrame (eine Spalte) ohne collect() schreiben? Es ist mir nicht gelungen, foreach für einen DataFrame zu verwenden und die Ergebnis-Map zu aktualisieren. –