web-dev-qa-db-ja.com

C#で整数のシーケンスを持つ配列を作成する方法は?

F#にはsequencesがあり、シーケンスを作成できます。

seq { 0 .. 10 }

0〜10の数字のシーケンスを作成します。

C#に似たようなものはありますか?

103
Budda

Enumerable.Range(0, 10);を使用できます。例:

var seq = Enumerable.Range(0, 10);

MSDNページ こちら

189
alexn
Enumerable.Range(0, 11);

指定された範囲内の整数のシーケンスを生成します。

http://msdn.Microsoft.com/en-us/library/system.linq.enumerable.range.aspx

34
Pauli Østerø

簡単な関数を作成できます。これは、より複雑なシーケンスで機能します。それ以外の場合は、Enumerable.Rangeすべきです。

IEnumerable<int> Sequence(int n1, int n2)
{
    while (n1 <= n2)
    {
        yield return  n1++;
    }
}
18
Josiah Ruddell

めったに使用されない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)
4
b_levitt

私の実装:

    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;
        }
    }
1
Dicaste

_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()を呼び出すと、次の注文番号を返し、カウンターをインクリメントします。

0
Jodrell