我有一个数组
val d = Array(1,-1,23,-5,7,8,0,-9)
我将所有偶数除以2
val index = for(i <- 0 until d.length if d(i)%2==0) yield d(i) / 2
我将所有奇数加1
val index = for(i <- 0 until d.length if d(i)%2==1) yield d(i) + 1
如何将这两个操作合而为一?
val index = for(i <- 0 until d.length) if(d(i)%2==0) yield d(i) / 2 else yield d(i) + 1
然后我收到语法错误
illegal start of simple expression
答案 0 :(得分:1)
您不能调用多个收益率。 所以试试这个:
val d = Array(1,-1,23,-5,7,8,0,-9)
val index = for(i <- 0 until d.length) yield (if(d(i)%2==0) d(i) / 2 else d(i) + 1)
答案 1 :(得分:1)
这非常直截了当
for{ value <- d
value2 = if(value ÷2 == 0 ) value/2 else value+1
} yield value2
结果
Array(2,0,24,-4,8,4,0;-8)
答案 2 :(得分:1)
您需要在yield
之后使用单个if
和yield
表达式(如注释中所述)
但是您不需要遍历索引,您可以直接遍历数组:
for (v <- d) yield if (v%2 == 0) v/2 else v + 1
这等效于map
呼叫:
d.map(v => if (v%2 == 0) v/2 else v + 1)
您也可以使用collect
:
d.collect {
case v if v%2 == 0 =>
v / 2
case v =>
v + 1
}