【问题标题】:Replace elements in one array from elements in other array in Scala在Scala中用另一个数组中的元素替换一个数组中的元素
【发布时间】:2019-12-20 21:29:47
【问题描述】:

我有两个数组。第一个数组的大小大于第二个。

 var first  = (1 to 20).toArray
 var second = (1 to 5).toArray

我想用 second 数组的元素替换 first 数组的第一个 n 元素。其中 n 是第二个数组的长度。 使用 For 循环我可以通过以下方式轻松做到这一点

 var n = second.length
 for(i <- 0 until n)
 {
  first(i) = second(i)
 }

我想问有没有其他方法可以在 Scala 中以更实用的方式执行相同的操作?

【问题讨论】:

  • 你所说的“更实用的方式”是什么意思?您是否正在寻找不改变第一个数组的解决方案?
  • @k0pernikus 是的。我正在寻找 For 循环的替代方案。
  • 你可以使用copyToArray,比如second.copyToArray(first)。此外,您可以根据需要将var 替换为val
  • 最后,即使是函数式方法也会循环数据。此外,函数式方法将创建另一个由结果组成的数组,因此具有更大的内存消耗。
  • 如果你想以函数式的方式编写,你应该首先避免使用Array,只是说...

标签: arrays scala loops functional-programming


【解决方案1】:

你可以这样做:

var first  = (1 to 20).toArray
var second = (1 to 5).toArray

val third = second ++ first.drop(second.length)

结果:

third: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)

【讨论】:

  • 这个 IIRC 要么返回一个向量,要么返回 IndexedSeq[Int],所以toArray 可能是必要的。
  • first = second ++ first.drop(second.length) 这将返回第一个包含更新元素的数组
  • @yari 是的,但既然你问的是更实用的方式,最好使用 val´s 而不是 vars,如果你真的想替换并保留 vars,那么这正是你写的.
猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2015-11-09
  • 2021-12-12
  • 1970-01-01
  • 2016-11-11
  • 2012-11-13
  • 1970-01-01
相关资源
最近更新 更多