繁体   English   中英

从 for 循环中的 for 循环产生 (Scala)

[英]yield from for-loop within a for-loop (Scala)

我正在开发一个程序来洗牌。 Case 类 Card 需要两个 Int,suit 和 value。 我想使用 for yield 创建所有 52 张卡片并将它们放在一个数组中。 我试过这个,但由于 yield 将第二个 for 循环视为 yield 我得到一个带有单位的数组(Array[Unit])。 有什么办法可以解决这个问题吗?

附言。 抱歉,如果我的问题不清楚,这是我第二次在这里提问。

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

以下是如何使用 for comprehension

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

多行理解

   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)"

你也可以做这样的事情来做“双迭代”,但我不知道这是否适用于这里。 第一个答案是我会如何做,但这是另一种选择。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM