Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为scala中的数组添加值 我遇到了一个问题,我需要在数组< /代码>的中间添加一个新值(即,复制原始数组并用新数组替换它)。我成功地解决了我的问题,但我想知道是否有其他方法可以做到这一点,而不用将数组更改为缓冲区一段时间 val original = Array(0, 1, 3, 4) val parts = original.splitAt(2) val modified = parts._1 ++ (2 +: parts._2) res0: Array[Int] = Array(0, 1, 2, 3, 4)_Arrays_Scala_Add - Fatal编程技术网

Arrays 为scala中的数组添加值 我遇到了一个问题,我需要在数组< /代码>的中间添加一个新值(即,复制原始数组并用新数组替换它)。我成功地解决了我的问题,但我想知道是否有其他方法可以做到这一点,而不用将数组更改为缓冲区一段时间 val original = Array(0, 1, 3, 4) val parts = original.splitAt(2) val modified = parts._1 ++ (2 +: parts._2) res0: Array[Int] = Array(0, 1, 2, 3, 4)

Arrays 为scala中的数组添加值 我遇到了一个问题,我需要在数组< /代码>的中间添加一个新值(即,复制原始数组并用新数组替换它)。我成功地解决了我的问题,但我想知道是否有其他方法可以做到这一点,而不用将数组更改为缓冲区一段时间 val original = Array(0, 1, 3, 4) val parts = original.splitAt(2) val modified = parts._1 ++ (2 +: parts._2) res0: Array[Int] = Array(0, 1, 2, 3, 4),arrays,scala,add,Arrays,Scala,Add,我不喜欢解决方案中的parts变量;我不希望使用这样的中间步骤。这是添加值的最简单方法还是有更好的方法添加元素 您可以使用a来执行此操作。insert方法可以执行您想要的操作(在给定索引处插入一个元素)。好吧,如果确实是额外的变量让您感到不安,您可以一次完成: val modified = original.take(2) ++ (2 +: original.drop(2)) 但是,根据您的使用情况(例如,性能、数组大小、多次编辑等),使用建议的可变集合可能更合适。问题是,上下文是什么?如果在

我不喜欢解决方案中的
parts
变量;我不希望使用这样的中间步骤。这是添加值的最简单方法还是有更好的方法添加元素

您可以使用a来执行此操作。insert方法可以执行您想要的操作(在给定索引处插入一个元素)。

好吧,如果确实是额外的变量让您感到不安,您可以一次完成:

val modified = original.take(2) ++ (2 +: original.drop(2))

但是,根据您的使用情况(例如,性能、数组大小、多次编辑等),使用建议的可变集合可能更合适。

问题是,上下文是什么?如果在循环中执行此操作,每次分配一个新阵列都会降低性能,您应该重新考虑方法(例如,在插入之前收集所有要插入的元素)

如果没有,那么可以使用
System.arraycopy
来避免任何中间转换:

val original = Array(0, 1, 3, 4)
val index = 2
val valueToInsert = 2

val modified = Array.ofDim[Int](original.length + 1)
System.arraycopy(original, 0, modified, 0, index)
modified(index) = valueToInsert
System.arraycopy(original, index, modified, index + 1, original.length - index)
但请注意,在这里,一个错误一个错误地消除是多么容易(我想没有一个错误,但我还没有测试过)。因此,这样做的唯一原因是如果您确实需要高性能,并且只有在循环中发生时才有可能,在这种情况下,请回到第二句话。

这正是它的作用:

对于使用
列表
,这是一个很好的解决方案。
val original = Array(0, 1, 3, 4)
original.patch(2, Array(2), 0)      // Array[Int] = Array(0, 1, 2, 3, 4)