abatishchev
abatishchev

Reputation: 100308

Ways in .NET to get an array of int from 0 to n

I'm searching the way(s) to fill an array with numbers from 0 to a random. For example, from 0 to 12 or 1999, etc.

Of course, there is a for-loop:

var arr = int[n];
for(int i = 0; i < n; i++)
{
  arr[i] = i;
}

And I can make this method been an extension for Array class. But is there some more interesting ways?

Upvotes: 5

Views: 5366

Answers (3)

Tim Long
Tim Long

Reputation: 13788

The best answer depends on why you need the array. The thing is, the value of any array element is equal to the index, so accessing any element is essentially a redundant operation. Why not use a class with an indexer, that just returnes the value of the index? It would be indistinguishable from a real array and would scale to any size, except it would take no memory and no time to set up. But I get the feeling it's not speed and compactness you are after. Maybe if you expand on the problem, then a better solution will be more obvious.

Upvotes: 1

Chris Shaffer
Chris Shaffer

Reputation: 32575

This already exists(returns IEnumerable, but that is easy enough to change if you need):

arr = Enumerable.Range(0, n);

Upvotes: 33

configurator
configurator

Reputation: 41670

The most interesting way in my mind produces not an array, but an IEnumerable<int> that enumerates the same number - it has the benefit of O(1) setup time since it defers the actual loop's execution:

public IEnumerable<int> GetNumbers(int max) {
    for (int i = 0; i < max; i++)
        yield return i;
}

This loop goes through all numbers from 0 to max-1, returning them one at a time - but it only goes through the loop when you actually need it.

You can also use this as GetNumbers(max).ToArray() to get a 'normal' array.

Upvotes: 7

Related Questions