2016-09-29 15 views
1

Ich arbeite an einem Programm, um ein Deck zu mischen. Die Fallklasse Card benötigt zwei Ints, Farbe und Wert. Ich möchte eine für den Ertrag verwenden, um alle 52 Karten zu erstellen und sie in ein Array zu setzen. Ich habe das versucht, aber da die Ausbeute die zweite für die Schleife als die Sache berücksichtigt, die es gibt, bekomme ich ein Array mit Einheiten (Array [Unit]). Gibt es eine Möglichkeit, dieses Problem zu umgehen?Ertrag von for-Schleife innerhalb einer for-Schleife (Scala)

Ps. Entschuldigung, wenn meine Frage unklar ist, ist es das zweite Mal, dass ich hier eine Frage stelle.

lazy val cards: Array[Card] = (
for (i <- 1 to 52) yield { 
    for (j <- 1 to 4) Card(j,i) 
}).toArray 

Antwort

1

Hier ist, wie die für das Verständnis verwenden

lazy val cards: Array[Card] = (for (i <- 1 to 52; j <- 1 to 4) yield Card(j, i)).toArray 

mehrzeiligen für Verständnis

lazy val cards: Array[Card] = 
    (for { 
     i <- 1 to 52 
     j <- 1 to 4 
    } yield Card(j,i)).toArray 

Scala REPL

scala> case class Card(j: Int, i: Int) 
defined class Card 

scala> lazy val cards: Array[Card] = 
    (for { 
     i <- 1 to 52 
     j <- 1 to 4 
     } yield Card(j,i)).toArray 
cards: Array[Card] = <lazy> 

scala> cards.mkString(" ") 
res6: String = "Card(1,1) Card(2,1) Card(3,1) Card(4,1) Card(1,2) Card(2,2) Card(3,2) Card(4,2) Card(1,3) Card(2,3) Card(3,3) Card(4,3) Card(1,4) Card(2,4) Card(3,4) Card(4,4) Card(1,5) Card(2,5) Card(3,5) Card(4,5) Card(1,6) Card(2,6) Card(3,6) Card(4,6) Card(1,7) Card(2,7) Card(3,7) Card(4,7) Card(1,8) Card(2,8) Card(3,8) Card(4,8) Card(1,9) Card(2,9) Card(3,9) Card(4,9) Card(1,10) Card(2,10) Card(3,10) Card(4,10) Card(1,11) Card(2,11) Card(3,11) Card(4,11) Card(1,12) Card(2,12) Card(3,12) Card(4,12) Card(1,13) Card(2,13) Card(3,13) Card(4,13) Card(1,14) Card(2,14) Card(3,14) Card(4,14) Card(1,15) Card(2,15) Card(3,15) Card(4,15) Card(1,16) Card(2,16) Card(3,16) Card(4,16) Card(1,17) Card(2,17) Card(3,17) Card(4,17) Card(1,18) Card(2,18) Card(3,18) Card(4,18) Card(1,19) Card(2,19) Card(3,19) Card(4,19) Card(1,20) Card(2,20) Card(3,20) Card(4,20) Card(1,21) Card(2,21) Card(3,21) Card(4,21) Card(1,22) Card(2,22) Card(3,22) Card(4,22) Card(1,23) Card(2,23) Card(3,23) Card(4,23) Card(1,24) Card(2,24) Card(3,24) Card(4,24) Card(1,25) Card(2,25) Card(3,25) Card(4,25) Card(1,26) Card(2,26) Card(3,26) Card(4,26) Card(1,27) Card(2,27) Card(3,27) Card(4,27) Card(1,28) Card(2,28) Card(3,28) Card(4,28) Card(1,29) Card(2,29) Card(3,29) Card(4,29) Card(1,30) Card(2,30) Card(3,30) Card(4,30) Card(1,31) Card(2,31) Card(3,31) Card(4,31) Card(1,32) Card(2,32) Card(3,32) Card(4,32) Card(1,33) Card(2,33) Card(3,33) Card(4,33) Card(1,34) Card(2,34) Card(3,34) Card(4,34) Card(1,35) Card(2,35) Card(3,35) Card(4,35) Card(1,36) Card(2,36) Card(3,36) Card(4,36) Card(1,37) Card(2,37) Card(3,37) Card(4,37) Card(1,38) Card(2,38) Card(3,38) Card(4,38) Card(1,39) Card(2,39) Card(3,39) Card(4,39) Card(1,40) Card(2,40) Card(3,40) Card(4,40) Card(1,41) Card(2,41) Card(3,41) Card(4,41) Card(1,42) Card(2,42) Card(3,42) Card(4,42) Card(1,43) Card(2,43) Card(3,43) Card(4,43) Card(1,44) Card(2,44) Card(3,44) Card(4,44) Card(1,45) Card(2,45) Card(3,45) Card(4,45) Card(1,46) Card(2,46) Card(3,46) Card(4,46) Card(1,47) Card(2,47) Card(3,47) Card(4,47) Card(1,48) Card(2,48) Card(3,48) Card(4,48) Card(1,49) Card(2,49) Card(3,49) Card(4,49) Card(1,50) Card(2,50) Card(3,50) Card(4,50) Card(1,51) Card(2,51) Card(3,51) Card(4,51) Card(1,52) Card(2,52) Card(3,52) Card(4,52)" 
+0

Vielen Dank! Funktioniert perfekt! – arachane

+0

@arachane Vergessen Sie nicht, die Lösung zu akzeptieren, wenn dies nützlich ist – pamu

0

Sie können als o machen Sie so etwas, um "Doppeliteration" zu machen, aber ich weiß nicht, ob das hier anwendbar ist. Die erste Antwort ist, wie ich es getan hätte, aber das ist eine andere Option.

for(b <- books; a <- b.authors if a startsWith "Bird, ") yield b.title 
+0

Vielen Dank! Funktioniert perfekt! – arachane

Verwandte Themen