1
Angenommen, ich muss ein Array von ganzen Zahlen nach links und rechts verschieben.Wie verschiebt Arrays und Matrizen in Scala
val shl : Array[Int] => Array[Int] = a => (a drop 1) :+ 0
val shr : Array[Int] => Array[Int] = a => 0 +: (a dropRight 1)
Angenommen, ich auch eine Matrix von ganzen Zahlen verschieben müssen links und rechts
val shlm: Array[Array[Int]] => Array[Array[Int]] = _ map shl
val shrm: Array[Array[Int]] => Array[Array[Int]] = _ map shr
und nach oben und unten
val zeros: Int => Array[Int] = n => Array.fill(n)(0)
val shum: Array[Array[Int]] => Array[Array[Int]] = m => (m drop 1) :+ zeros(m.length)
val shdm: Array[Array[Int]] => Array[Array[Int]] = m => zeros(m.length) +: (m dropRight 1)
Nun möchte Ich mag verallgemeinernshl
und shr
um sie für das Verschieben der Matrix nach oben und unten wiederzuverwenden. Wie würdest du das machen?
Danke. Bedeutet der 'ClassTag' Laufzeit-Reflektion? – Michael
Ja, die Scala-Laufzeitbibliothek benötigt die Informationen über die konkrete Klasse, um das Array zu erstellen (siehe Antwort zu http://stackoverflow.com/questions/16921168/scala-generic-method-no-classtag-available-for-t) . – devkat
Oh, ich verstehe ... Kann ich dieses Problem ohne Laufzeit-Reflektion lösen, wenn ich eine andere Klasse anstelle von 'Array' verwende? – Michael