Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fastest way to add an Item to an Array

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?

like image 934
jor Avatar asked Aug 07 '13 07:08

jor


People also ask

How do you add an object to an array?

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.


1 Answers

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 
like image 97
jor Avatar answered Sep 26 '22 23:09

jor