Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to initialize integer array in C# [duplicate]

Tags:

c#

.net

Possible Duplicate:
c# Leaner way of initializing int array

Basically I would like to know if there is a more efficent code than the one shown below

    private static int[] GetDefaultSeriesArray(int size, int value)
    {
        int[] result = new int[size];
        for (int i = 0; i < size; i++)
        {
            result[i] = value;
        }
        return result;
    }

where size can vary from 10 to 150000. For small arrays is not an issue, but there should be a better way to do the above. I am using VS2010(.NET 4.0)

like image 253
mas_oz2k1 Avatar asked Dec 20 '12 21:12

mas_oz2k1


People also ask

How do you initialize array in c?

Initializer List: To initialize an array in C with the same value, the naive way is to provide an initializer list. We use this with small arrays. int num[5] = {1, 1, 1, 1, 1}; This will initialize the num array with value 1 at all index.

Do Arrays initialize to 0 in c?

Initialize Arrays in C/C++ c. The array will be initialized to 0 if we provide the empty initializer list or just specify 0 in the initializer list.

How do you initialize an array with 0?

An array is initialized to 0 if the initializer list is empty or 0 is specified in the initializer list. The declaration is as given below: int number[5] = { }; int number[5] = { 0 }; The most simple technique to initialize an array is to loop through all the elements and set them as 0 .


1 Answers

C#/CLR does not have built in way to initalize array with non-default values.

Your code is as efficient as it could get if you measure in operations per item.

You can get potentially faster initialization if you initialize chunks of huge array in parallel. This approach will need careful tuning due to non-trivial cost of mutlithread operations.

Much better results can be obtained by analizing your needs and potentially removing whole initialization alltogether. I.e. if array is normally contains constant value you can implement some sort of COW (copy on write) approach where your object initially have no backing array and simpy returns constant value, that on write to an element it would create (potentially partial) backing array for modified segment.

Slower but more compact code (that potentially easier to read) would be to use Enumerable.Repeat. Note that ToArray will cause significant amount of memory to be allocated for large arrays (which may also endup with allocations on LOH) - High memory consumption with Enumerable.Range?.

 var result = Enumerable.Repeat(value, size).ToArray();
like image 164
Alexei Levenkov Avatar answered Oct 24 '22 09:10

Alexei Levenkov