问题描述
什么是新项目添加到现有阵列的最快方法?
What is the fastest way to add a new item to an existing array?
Dim arr As Integer() = {1, 2, 3}
Dim newItem As Integer = 4
(我已经知道,随着项目的动态列表时,你应该宁可使用列表
,的ArrayList
或类似 IEnumerables
。但是,如果你坚持使用数组遗留code做什么?)
(I already know that when working with dynamic list of items you should rather use a List
, ArrayList
or similar IEnumerables
. But what to do if you're stuck to legacy code that uses arrays?)
我试过到目前为止:
' A) converting to List, add item and convert back
Dim list As List(Of Integer)(arr)
list.Add(newItem)
arr = list.ToArray()
' --> duration for adding 100.000 items: 33270 msec
' B) redim array and add item
ReDim Preserve arr(arr.Length)
arr(arr.Length - 1) = newItem
' --> duration for adding 100.000 items: 9237 msec
' C) using Array.Resize
Array.Resize(arr, arr.Length + 1)
arr(arr.Length - 1) = newItem
' --> duration for adding 100.000 items: 1 msec
' --> duration for adding 100.000.000 items: 1168 msec
A)看起来很慢,因为每一个项目被加入整个阵列的两次转换的时间就完成了。 B)似乎更快,但仍然在使用ReDim preserve
阵列复制一次。 ℃)似乎是在这一点上是最快的。有什么好?
A) seems very slow since every time an item is added two conversions of the whole array are done. B) seems faster but still the array is copied once during the ReDim Preserve
. C) seems to be the fastest at this point. Is there anything better?
推荐答案
案例C)是最快的。有了这个作为扩展:
Case C) is the fastest. Having this as an extension:
Public Module MyExtensions
<Extension()> _
Public Sub Add(Of T)(ByRef arr As T(), item As T)
Array.Resize(arr, arr.Length + 1)
arr(arr.Length - 1) = item
End Sub
End Module
用法:
Dim arr As Integer() = {1, 2, 3}
Dim newItem As Integer = 4
arr.Add(newItem)
' --> duration for adding 100.000 items: 1 msec
' --> duration for adding 100.000.000 items: 1168 msec
这篇关于要将项目添加到一个数组最快的方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!