说我有Array[Int]
喜欢
val array = Array( 1, 2, 3 )
现在我想在数组中添加一个元素,比如值4
,如下例所示:
val array2 = array + 4 // will not compile
我当然可以使用System.arraycopy()
并单独执行此操作,但必须有一个Scala库函数,我根本找不到。感谢您的任何指示!
注意:
我知道我可以添加另一个元素数组,如下一行所示,但这似乎太圆了:
val array2b = array ++ Array( 4 ) // this works
我知道List vs Array的优点和缺点,在这里我出于各种原因对扩展Array特别感兴趣。
感谢指向:+
运算符方法的答案。这就是我想要的。不幸的是,它比使用arraycopy
的自定义append()方法实现慢得多 - 大约慢两到三倍。查看SeqLike[]
中的实现,创建构建器,然后将数组添加到其中,然后通过构建器完成追加,然后呈现构建器。对阵列来说不是一个好的实现。我做了一个比较两种方法的快速基准测试,查看十个周期中最快的时间。对一个类Foo
的8元素数组实例执行1000万次重复的单项附加需要3.1秒:+
和1.7秒使用append()
方法使用{System.arraycopy();
使用简单的:+
方法,在{8}的{8}数组上进行1000万次单项追加重复,append()
和0.78秒。想知道如果使用Array
的自定义实现无法在库中修复此问题吗?
为了它的价值,我提交了一张票: https://issues.scala-lang.org/browse/SI-5017
答案 0 :(得分:171)
您可以使用:+
将元素附加到数组,并使用+:
将其添加到前面:
0 +: array :+ 4
应该产生:
res3: Array[Int] = Array(0, 1, 2, 3, 4)
与Seq
的任何其他实现相同。
答案 1 :(得分:50)
val array2 = array :+ 4
//Array(1, 2, 3, 4)
作品也“逆转”:
val array2 = 4 +: array
Array(4, 1, 2, 3)
还有一个“就地”版本:
var array = Array( 1, 2, 3 )
array +:= 4
//Array(4, 1, 2, 3)
array :+= 0
//Array(4, 1, 2, 3, 0)
答案 2 :(得分:7)