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
(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?)
What I've tried so far:
' 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) 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?
To add items and objects to an array, you can use the push() function in JavaScript. The push() function adds an item or object at the end of an array. For example, let's create an array with three values and add an item at the end of the array using the push() function.
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
Usage:
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With