F#にはsequencesがあり、シーケンスを作成できます。
seq { 0 .. 10 }
0〜10の数字のシーケンスを作成します。
C#に似たようなものはありますか?
Enumerable.Range(0, 11);
指定された範囲内の整数のシーケンスを生成します。
http://msdn.Microsoft.com/en-us/library/system.linq.enumerable.range.aspx
簡単な関数を作成できます。これは、より複雑なシーケンスで機能します。それ以外の場合は、Enumerable.Range
すべきです。
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
めったに使用されないLinq投影 indexer overload(i) :
(new int[11]).Select((o,i) => i)
私はこの方法が柔軟性に優れていることを好みます。
たとえば、偶数が必要な場合:
(new int[11]).Select((item,i) => i*2)
または、1時間の5分の増分が必要な場合:
(new int[12]).Select((item,i) => i*5)
または文字列:
(new int[12]).Select((item,i) => "Minute:" + i*5)
私の実装:
private static IEnumerable<int> Sequence(int start, int end)
{
switch (Math.Sign(end - start))
{
case -1:
while (start >= end)
{
yield return start--;
}
break;
case 1:
while (start <= end)
{
yield return start++;
}
break;
default:
yield break;
}
}
_IEnumerable<int>
_から変数end
に数字のシーケンス(_0
_)を列挙したい場合は、試してください
_Enumerable.Range(0, ++end);
_
説明では、0から1000までの数字のシーケンスを取得するには、シーケンスを0から開始する必要があります(0から1000の間に1001の数字があることを思い出してください)。
無制限の線形シリーズが必要な場合は、次のような関数を書くことができます
_IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
_
あなたのように使用できます
_var ZeroTo1000 = Series().Take(1001);
_
関数が必要な場合は、繰り返し呼び出して増分値を生成できます。おそらく、次のようなものが必要です。
_using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
_
Seq()
を呼び出すと、次の注文番号を返し、カウンターをインクリメントします。