回答:
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++;
}
}
OddSequence
EvenSequence
または他のカスタム範囲を検討していたと思います。if (++n1 % 2 == 0) yield return n1
、 例えば。数日が経過しました;)
めったに使用されないインデクサーオーバーロードを使用したLinqプロジェクション(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)
C#8.0では、インデックスと範囲を使用できます
例えば:
var seq = 0..2;
var array = new string[]
{
"First",
"Second",
"Third",
};
foreach(var s in array[seq])
{
System.Console.WriteLine(s);
}
// Output: First, Second
または、作成したいIEnumerable<int>
場合は、拡張機能を使用できます。
public static IEnumerable<int> ToEnumerable(this Range range)
{
for (var i = range.Start.Value; i < range.End.Value; i++)
{
yield return i;
}
}
...
var seq = 0..2;
foreach (var s in seq.ToEnumerable())
{
System.Console.WriteLine(s);
}
// Output: 0, 1
PSしかし、「最後からのインデックス」には注意してください。たとえば、ToEnumerable拡張メソッドはでは機能しませんvar seq = ^2..^0
。
もともとここで答えた。
IEnumerable<int>
から0
変数への一連の数値()を列挙したい場合はend
、
Enumerable.Range(0, ++10);
説明では、0から10までの数字のシーケンスを取得するには、シーケンスを0から開始する必要があります(0から10までの11の数字があることを思い出してください)。
無制限の線形系列が必要な場合は、次のような関数を記述できます。
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(11);
関数が必要な場合は、繰り返し呼び出して増分する数値を生成できます。
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
呼び出すSeq()
と、次の注文番号が返され、カウンターがインクリメントされます。
私のコードにはこれらの関数があります
private static IEnumerable<int> FromZero(this int count)
{
if (count <= 0)
yield break;
for (var i = 0; i < count; i++)
{
yield return i;
}
}
private static IEnumerable<int> FromOne(this int count)
{
if (count <= 0)
yield break;
for (var i = 1; i <= count; i++)
{
yield return i;
}
}
これにより、一部のfor(i)コードを削減できます。
IEnumerable<int>
場合は、呼び出しを含めます.ToArray()
。