scala - 在 Scala 中迭代三个以上的数组

标签 scala for-loop

我必须把一堆愚蠢的逗号分隔的字符串最终变成对象。我首先将字符串拆分为数组。然后我需要同时迭代所有这些值并从四个值中构建一个对象。

val s1 = Array(1,2,3)
val s2 = Array("a","b","c")
val s3 = Array(10,20,30)
val s4 = Array("u","v","w")

目标对象如下所示:
case class Data(a: Int, b: String, c: Int, d: String)

第一个 Data 对象必须打印
Data(1,a,10,u)

等等。我找到了三个项目的解决方案:
(s1, s2, s3).zipped foreach { (v1, v2, v3) =>
  println(v1, v2, v3)
}

哪个打印:
(1,a,10)
(2,b,20)
(3,c,30)

使用四个或更多数组时,这不会发生。没有为 4 元组定义压缩:
error: value zipped is not a member of (Array[Int], Array[String], Array[Int], Array[String])

我的 Scala 有点生疏,所以也许我错过了明显的东西(比如带有索引的迭代或其他东西)。

最佳答案

它不漂亮,但应该可以工作(使用任意数量的行长)

val items: Array[Array[Any]] = Array (
  Array(1,2,3),
  Array("a","b","c"),
  Array(10,20,30),
  Array("u","v","w")
)

items.transpose.map {
  case Array(a: Int, b: String, c: Int, d: String) => Data(a,b,c,d)
}
// Array(Data(1,a,10,u), Data(2,b,20,v), Data(3,c,30,w))

关于scala - 在 Scala 中迭代三个以上的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18343214/

相关文章:

c++ - C++验证数字输入中的逗号位置

python - 在运行时更改 Python for 循环范围(上限)

scala - Scala的 “powerful”类型系统是什么?

scala - 为什么sortByKey的 Spark 这么慢?他们有其他选择吗?

Scalatra 设置响应 header

scala - 使用泛型类型关闭数据路径中的逻辑(Chisel)

FOR 内的 PHP mysql_query 仅适用于第一个循环

c++ - 在没有字符串或数组函数的情况下迭代文本

HTML 中的 PHP 简单 for 循环 (Codeigniter)

Scala map 更新