Gre*_*idt 107 arrays scala append
说我Array[Int]喜欢
val array = Array( 1, 2, 3 )
Run Code Online (Sandbox Code Playgroud)
现在我想在数组中添加一个元素,比如值4,如下例所示:
val array2 = array + 4 // will not compile
Run Code Online (Sandbox Code Playgroud)
我当然可以System.arraycopy()自己使用并执行此操作,但必须有一个Scala库函数,我根本找不到.感谢您的任何指示!
笔记:
我知道我可以附加另一个元素数组,如下面一行,但这似乎太圆了:
val array2b = array ++ Array( 4 ) // this works
Run Code Online (Sandbox Code Playgroud)我知道List vs Array的优点和缺点,在这里我出于各种原因特别感兴趣扩展Array.
感谢指向:+操作员方法的答案.这就是我想要的.不幸的是,它比使用自定义append()方法实现慢得多arraycopy- 大约慢两到三倍.查看实现SeqLike[],创建构建器,然后将数组添加到其中,然后通过构建器完成追加,然后呈现构建器.对阵列来说不是一个好的实现.我做了一个比较两种方法的快速基准测试,查看十个周期中最快的时间.将一个项目的1000万次重复附加到某个类的8个元素数组实例Foo需要3.1秒:+和1.7秒,使用一个简单的append()方法,使用System.arraycopy();在8个元素的Long元素上执行1000万个单项追加重复2.1用:+简单的append()方法得秒和0.78秒.想知道这是否无法在具有自定义实现的库中修复Array?
为了它的价值,我提交了一张票:https: //issues.scala-lang.org/browse/SI-5017
ten*_*shi 182
您可以使用:+将元素追加到数组并+:在其前面添加:
0 +: array :+ 4
Run Code Online (Sandbox Code Playgroud)
应该产生:
res3: Array[Int] = Array(0, 1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
它与任何其他实现相同Seq.
Lan*_*dei 52
val array2 = array :+ 4
//Array(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
作品也"逆转":
val array2 = 4 +: array
Array(4, 1, 2, 3)
Run Code Online (Sandbox Code Playgroud)
还有一个"就地"版本:
var array = Array( 1, 2, 3 )
array +:= 4
//Array(4, 1, 2, 3)
array :+= 0
//Array(4, 1, 2, 3, 0)
Run Code Online (Sandbox Code Playgroud)
最简单的可能是:
Array(1, 2, 3) :+ 4
Run Code Online (Sandbox Code Playgroud)
实际上,Array可以在一个实际上被转换 WrappedArray
| 归档时间: |
|
| 查看次数: |
124621 次 |
| 最近记录: |