Adding values to a C# array

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP



Adding values to a C# array



Probably a really simple one this - I'm starting out with C# and need to add values to an array, for example:


int terms;

for(int runs = 0; runs < 400; runs++)

terms = runs;



For those who have used PHP, here's what I'm trying to do in C#:


$arr = array();
for ($i = 0; $i < 10; $i++)
$arr = $i;





Shouldn't 'terms = value;' be 'terms = runs;'?
– tymtam
Feb 7 '13 at 1:28




17 Answers
17



You can do this way -


int terms = new int[400];
for (int runs = 0; runs < 400; runs++)

terms[runs] = value;



Alternatively, you can use Lists - the advantage with lists being, you don't need to know the array size when instantiating the list.


List<int> termsList = new List<int>();
for (int runs = 0; runs < 400; runs++)

termsList.Add(value);


// You can convert it back to an array if you would like to
int terms = termsList.ToArray();



Edit: a) for loops on List<T> are a bit more than 2 times cheaper than foreach loops on List<T>, b) Looping on array is around 2 times cheaper than looping on List<T>, c) looping on array using for is 5 times cheaper than looping on List<T> using foreach (which most of us do).





Whats the advantage of using a list in this scenario?
– Phill Healey
Feb 17 '14 at 11:10





@PhillHealey You don't have to "know" how big the array might become, before you create it. As you can see, in these examples, OP has to put a value into "new int[400]" - but with the list, he doesn't have to do so.
– Hejner
Mar 5 '14 at 13:09





you need to be careful here as a list is just doing a dynamic array expansion under the covers would be good to at least know the capacity.
– krystan honour
Aug 5 '15 at 8:12





Wouldn't the first bit of code not be anything since value is not defined anywhere. -_-
– EasyBB
Sep 10 '15 at 3:47





Why you say that ARRAY need to have a size??? just do new int !!!!!
– T.Todua
Oct 8 '17 at 11:30



new int



If you're writing in C# 3, you can do it with a one-liner:


int terms = Enumerable.Range(0, 400).ToArray();



This code snippet assumes that you have a using directive for System.Linq at the top of your file.



On the other hand, if you're looking for something that can be dynamically resized, as it appears is the case for PHP (I've never actually learned it), then you may want to use a List instead of an int. Here's what that code would look like:


List<int> terms = Enumerable.Range(0, 400).ToList();



Note, however, that you cannot simply add a 401st element by setting terms[400] to a value. You'd instead need to call Add(), like this:


terms.Add(1337);



Answers on how to do it using an array are provided here.



However, C# has a very handy thing called System.Collections :)



Collections are fancy alternatives to using an array, though many of them use an array internally.



For example, C# has a collection called List that functions very similar to the PHP array.


using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)

list.Add(i);





for retrieving a list element: int a = list[i];
– Behzad
Mar 16 '13 at 9:45



Using Linq's method Concat makes this simple


int array = new int 3, 4 ;

array = array.Concat(new int 2 ).ToArray();



result
3,4,2





The method will make adding 400 items to the array create a copy of the array with one more space and moving all elements to the new array, 400 hundred times. so is not recommended performance wise.
– KinSlayerUY
Sep 7 at 14:28



You have to allocate the array first:


int terms = new int[400]; // allocate an array of 400 ints
for(int runs = 0; runs < terms.Length; runs++) // Use Length property rather than the 400 magic number again

terms[runs] = value;



Using a List as an intermediary is the easiest way, as others have described, but since your input is an array and you don't just want to keep the data in a List, I presume you might be concerned about performance.



The most efficient method is likely allocating a new array and then using Array.Copy or Array.CopyTo. This is not hard if you just want to add an item to the end of the list:


public static T Add<T>(this T target, T item)

if (target == null)

//TODO: Return null or throw ArgumentNullException;

T result = new T[target.Length + 1];
target.CopyTo(result, 0);
result[target.Length] = item;
return result;



I can also post code for an Insert extension method that takes a destination index as input, if desired. It's a little more complicated and uses the static method Array.Copy 1-2 times.





It would be much better, performance wise to create a list, fill it up and then do this copy to array at the end, so you are not creating and copying the array over and over 400 times
– KinSlayerUY
Sep 7 at 14:30



Based on the answer of Thracx (I don't have enough points to answer):


public static T Add<T>(this T target, params T items)

// Validate the parameters
if (target == null)
target = new T ;

if (items== null)
items = new T ;


// Join the arrays
T result = new T[target.Length + items.Length];
target.CopyTo(result, 0);
items.CopyTo(result, target.Length);
return result;



This allows to add more than just one item to the array, or just pass an array as a parameter to join two arrays.


int ArraySize = 400;

int terms = new int[ArraySize];


for(int runs = 0; runs < ArraySize; runs++)


terms[runs] = runs;




That would be how I'd code it.



C# arrays are fixed length and always indexed. Go with Motti's solution:


int terms = new int[400];
for(int runs = 0; runs < 400; runs++)

terms[runs] = value;



Note that this array is a dense array, a contiguous block of 400 bytes where you can drop things. If you want a dynamically sized array, use a List<int>.


List<int> terms = new List<int>();
for(int runs = 0; runs < 400; runs ++)

terms.Add(runs);



Neither int nor List<int> is an associative array -- that would be a Dictionary<> in C#. Both arrays and lists are dense.


int terms = new int[10]; //create 10 empty index in array terms

//fill value = 400 for every index (run) in the array
//terms.Length is the total length of the array, it is equal to 10 in this case
for (int run = 0; run < terms.Length; run++)

terms[run] = 400;


//print value from each of the index
for (int run = 0; run < terms.Length; run++)

Console.WriteLine("Value in index 0:t1",run, terms[run]);


Console.ReadLine();



/*Output:



Value in index 0: 400

Value in index 1: 400

Value in index 2: 400

Value in index 3: 400

Value in index 4: 400

Value in index 5: 400

Value in index 6: 400

Value in index 7: 400

Value in index 8: 400

Value in index 9: 400

*/





Could you explain this solution?
– Deep Frozen
Jan 31 '13 at 8:15





Rune, I have just included the comment inside the source code> Hope it could answer your question.
– jhyap
Jan 31 '13 at 23:58



You can't just add an element to an array easily. You can set the element at a given position as fallen888 outlined, but I recommend to use a List<int> or a Collection<int> instead, and use ToArray() if you need it converted into an array.


List<int>


Collection<int>


ToArray()



If you really need an array the following is probly the simplest:


using System.Collections.Generic;

// Create a List, and it can only contain integers.
List<int> list = new List<int>();

for (int i = 0; i < 400; i++)

list.Add(i);


int terms = list.ToArray();



If you don't know the size of the Array or already have an existing array that you are adding to. You can go about this in two ways. The first is using a generic List<T>:
To do this you will want convert the array to a var termsList = terms.ToList(); and use the Add method. Then when done use the var terms = termsList.ToArray(); method to convert back to an array.


List<T>


var termsList = terms.ToList();


var terms = termsList.ToArray();


var terms = default(int);
var termsList = terms == null ? new List<int>() : terms.ToList();

for(var i = 0; i < 400; i++)
termsList.Add(i);

terms = termsList.ToArray();



The second way is resizing the current array:


var terms = default(int);

for(var i = 0; i < 400; i++)

if(terms == null)
terms = new int[1];
else
Array.Resize<int>(ref terms, terms.Length + 1);

terms[terms.Length - 1] = i;



If you are using .NET 3.5 Array.Add(...);


Array.Add(...);



Both of these will allow you to do it dynamically. If you will be adding lots of items then just use a List<T>. If it's just a couple of items then it will have better performance resizing the array. This is because you take more of a hit for creating the List<T> object.


List<T>


List<T>



Times in ticks:



3 items



Array Resize Time: 6



List Add Time: 16



400 items



Array Resize Time: 305



List Add Time: 20



Just a different approach:


int runs = 0;
bool batting = true;
string scorecard;

while (batting = runs < 400)
scorecard += "!" + runs++;

return scorecard.Split("!");





While slightly novel, this is performing a lot of string concatenation and then performing a large enumeration operation! Not the most performant, or easily understandable/readable way of going about this.
– BradleyDotNET
Sep 16 '14 at 23:47





@Ali Humayun did you really intend to use the assignment operator = instead of the comparison operator? You can leave out the battling variable and use runs < 400 to control the loop.
– Steve
May 10 '15 at 3:10



=


runs < 400





just practicing programming double entendre
– Ali Humayun
May 11 '15 at 17:51


int terms = new int[400];

for(int runs = 0; runs < 400; runs++)

terms[runs] = value;


static void Main(string args)

int arrayname = new int[5];/*arrayname is an array of 5 integer [5] mean in array [0],[1],[2],[3],[4],[5] because array starts with zero*/
int i, j;


/*initialize elements of array arrayname*/
for (i = 0; i < 5; i++)

arrayname[i] = i + 100;


/*output each array element value*/
for (j = 0; j < 5; j++)

Console.WriteLine("Element and output value [0]=1",j,arrayname[j]);

Console.ReadKey();/*Obtains the next character or function key pressed by the user.
The pressed key is displayed in the console window.*/


/*arrayname is an array of 5 integer*/
int arrayname = new int[5];
int i, j;
/*initialize elements of array arrayname*/
for (i = 0; i < 5; i++)

arrayname[i] = i + 100;




Thank you for your interest in this question.
Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).



Would you like to answer one of these unanswered questions instead?

Popular posts from this blog

Firebase Auth - with Email and Password - Check user already registered

Dynamically update html content plain JS

How to determine optimal route across keyboard