tags:

views:

205

answers:

3

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?

+6  A: 

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.

configurator
+29  A: 

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

arr = Enumerable.Range(0, n);
Chris Shaffer
You need to add a .ToArray()
David B
+1  A: 

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.

Tim Long