2009-05-12 4 views
4

0からランダムまでの数値で配列を塗りつぶす方法を探しています。.NETで0からnまでの整数の配列を取得する方法

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

そして私は、このメソッドはArrayクラスの拡張となって行うことができます:例えば、0から12または1999、当然のことなど

に、そこfor -loopあります。しかし、もっと面白い方法がありますか?

+1

機能実装を行うことができます。リストを作成し、ToArrayを使用することができます。最終的に、問題は本当に興味深いものではないので、面白い解決策はないと思います。 – BobbyShaftoe

+0

アレイで何をしたいですか?私は 'configuratorのソリューションが好きです... – n8wrl

+0

実際に私のソリューションはEnumerable.Range(0、n)と同じ結果を返します。 – configurator

答えて

29

これは、すでに存在しているが(IEnumerableを返しますが、それはあなたが必要な場合は、変更するのは簡単です):

arr = Enumerable.Range(0, n); 
+2

.ToArray()を追加する必要があります。 –

6

私の心の中で最も興味深い方法は同じ番号を列挙配列が、IEnumerable<int>をしませ生産 - それは実際にループの実行を延期するので、それはO(1)セットアップ時間の利点があります。

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

このループは、0からmax-1までのすべての数字を1つずつ戻しますが、実際に必要なときだけループを通過します。

GetNumbers(max).ToArray()としてこれを使用して、「通常の」配列を得ることもできます。

1

最良の答えは、あなたが配列を必要とする理由に依存します。つまり、配列要素の値はインデックスと等しいため、要素へのアクセスは本質的に冗長な操作です。インデックスの値を返すだけのインデクサを持つクラスを使用しないでください。実際の配列と区別がつかず、メモリを必要とせず、セットアップに時間がかからないことを除いて、どのようなサイズにも拡張できます。しかし、私はあなたが後になってスピードとコンパクトさではないと感じる。たぶん問題を拡大すると、より良い解決策が明らかになります。