繁体   English   中英

在Scala中循环的正确方法

[英]Proper way for looping in Scala

假设我在Scala中有一个字符串数组:

val strings = Array[String]("1", "2", "3", "4", "5", "6", "7")

我需要的是创建一个新数组,哪些元素将作为第一个数组的每三个(任意数量)后续元素的串联获得,这应该导致("123", "456", "7")

作为Scala的新手,我编写了以下代码,既不简洁也不有效:

var step = 3
val strings = Array[String]("1", "2", "3", "4", "5", "6", "7")
val newStrings = collection.mutable.ArrayBuffer.empty[String]

for (i <- 0 until strings.length by step) {
  var elem = ""
  for (k <- 0 until step if i + k < strings.length) {
    elem += strings(i + k)
  }
  newStrings += elem
}

Scala的做法是什么?

strings.grouped(3).map(_.mkString).toArray

要么

strings grouped 3 map (_.mkString) toArray

我个人比较喜欢第一个版本:)

strings grouped 3 map (_.mkString)

或(为了真正得到一个Array

(strings grouped 3 map (_.mkString)).toArray

...或使用滑动

val strings = Array[String]("1", "2", "3", "4", "5", "6", "7")
strings.sliding (3, 3) .map (_.mkString).toArray

res19: Array[String] = Array(123, 456, 7)

滑动:你拿3,继续前进3.变种:

scala> strings.sliding (3, 2) .map (_.mkString).toArray
res20: Array[String] = Array(123, 345, 567)

拿3,但前进2

scala> strings.sliding (2, 3) .map (_.mkString).toArray
res21: Array[String] = Array(12, 45, 7)

取2,前进3(从而跳过每三分之一)

暂无
暂无

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

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