sc_*_*ray 7 iteration swap for-loop scala yield
我试图使用for和yield交换我的数组中的每对值,到目前为止我非常不成功.我试过的内容如下:
val a = Array(1,2,3,4,5) //What I want is Array(2,1,4,3,5)
for(i<-0 until (a.length-1,2),r<- Array(i+1,i)) yield r
Run Code Online (Sandbox Code Playgroud)
上面给出的片段返回向量2,1,4,3(省略了5)
有人可以指出我在这里做错了什么以及如何使用for和yield得到正确的逆转?
谢谢
Rog*_*ach 39
a.grouped(2).flatMap(_.reverse).toArray
Run Code Online (Sandbox Code Playgroud)
或者如果你需要/ yield(在这种情况下更简洁,实际上扩展到相同的代码):
(for {b <- a.grouped(2); c <- b.reverse} yield c).toArray
Run Code Online (Sandbox Code Playgroud)
dhg*_*dhg 14
如果你不使用它会更容易for/yield:
a.grouped(2)
.flatMap{
case Array(x,y) => Array(y,x)
case Array(x) => Array(x)
}.toArray // Array(2, 1, 4, 3, 5)
Run Code Online (Sandbox Code Playgroud)
我不知道OP是否正在阅读Scala for the Impatient,但这是练习3.3.
我喜欢地图解决方案,但我们还不在那一章,所以这是我使用/ yield所需的丑陋实现.您可以将一些良率逻辑移动到一个保护/定义中.
for( i <- 0 until(a.length,2); j <- (i+1).to(i,-1) if(j<a.length) ) yield a(j)
Run Code Online (Sandbox Code Playgroud)
我是一个Java人,所以我没有确认这个断言,但我很好奇地图/分组和迭代器的开销是多少.我怀疑这一切都归结为相同的Java字节代码.