0

次の 2 つのリストがあります。実行時に list2 が空になるか満杯になるかはわかりませんが、list1 は常に空ではありません。次の for ループで list の値が少なくとも出力されるようにする方法

val list1 = List(1,2,3)                   //> list1  : List[Int] = List(1, 2, 3)
val list2 = List()                        //> list2  : List[Nothing] = List()
for( counti <- list1 ; countj <- list2 ) yield println (counti + " - " + countj)
                                                  //> res7: List[Unit] = List()

私は次のようなものを期待しています

1 - BLANK
2 - BLANK
3 - BLANK

しかし、上記の for ループは空の結果 List() を与えています

4

2 に答える 2

6
for (
  counti <- list1;
  countj <- if(list2.nonEmpty) list2 else List("BLANK")
) {
  println(counti + " - " + countj)
}
于 2012-10-31T01:11:32.963 に答える
2

First, you don't need yield if you're only using the for for side effects (printing):

for( counti <- list1 ; countj <- list2 )
  println (counti + " - " + countj)

Second, what do you expect the value of countj to be if you have an empty list? There's no way you can expect the code to work if there's no value for countj.

This might do what you want though:

// Just print counti
if (list2.isEmpty)
  for( counti <- list1 ) println(counti)
// Print both    
else for ( counti <- list1 ; countj <- list2 )
  println (counti + " - " + countj)
于 2012-10-31T01:14:43.697 に答える