2012-04-14 20 views
1

Ich habe eine CSV-Antwort von einem Dienst und ich möchte eine Liste von Fallklassen erstellen. Zum Beispiel:Fallklassen aus CSV in Scala generieren

case class MyCaseClass(e1: String, e2: String, e3: String) 

val body = getLargeCsvFromServiceOrSomething() 
val elements = body.split(",") 

Jetzt habe ich eine Array[String]. Ich möchte dieses große Array nehmen und es in 3-Element-Chucks zerlegen, so dass ich meine List[MyCaseClass] generieren kann, wobei jede Instanz 3 Elemente aus dem Array nimmt. Gibt es eine ähnliche Methode wie splitAt, spuckt aber alle n Elemente aus? Ich bin mir sicher, dass ich das ohne Punkt machen kann, aber es kommt einfach nicht zu mir.

+0

Wenn es eine CSV ist, dann sollten Sie die Zeilen durch Zeilenumbrüche getrennt haben und dann angeblich drei Elemente pro Linie. Ich denke, es ist robuster, zuerst nach Newline zu teilen und dann die Zeilen den Instanzen der Fallklasse zuzuordnen. – ziggystar

+0

Ya, das habe ich genau gemacht. – andyczerwonka

Antwort

4

Was Sie wollen, ist grouped:

scala> List(1,2,3,4,5,6,7).grouped(3).toList 
res0: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7)) 

So Ihr Ding könnte wie sein:

val elements = Array("a","b","c","d","e","f") 
val classes = elements.grouped(3).map{ case Array(a,b,c) => MyCaseClass(a,b,c) }  
println(classes.toList) // List(MyCaseClass(a,b,c), MyCaseClass(d,e,f)) 
+0

ya, das ist die Methode, nach der ich gesucht habe. Ich wusste, dass es so einfach war. Vielen Dank. – andyczerwonka

Verwandte Themen