Jak stworzyć tablicę z sekwencją liczb całkowitych w C#?

F # posiada sekwencje które pozwalają na tworzenie sekwencji:

seq { 0 .. 10 }

Tworzenie sekwencji liczb od 0 do 10.

Czy jest coś podobnego w C#?

Author: Mark Rotteveel, 2011-01-04

6 answers

Możesz użyć Enumerable.Range(0, 10);. Przykład:

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

Strona MSDN tutaj .

 163
Author: alexn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-03 22:06:46
Enumerable.Range(0, 11);

Generuje ciąg liczb całkowitych w określonym zakresie.

Http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx

 26
Author: Pauli Østerø,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-04 17:25:14

Można utworzyć prostą funkcję. To zadziała dla bardziej skomplikowanej sekwencji. W przeciwnym razie {[1] } powinien to zrobić.

IEnumerable<int> Sequence(int n1, int n2)
{
    while (n1 <= n2)
    {
        yield return  n1++;
    }
}
 15
Author: Josiah Ruddell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-03 22:16:08

Moja realizacja:

    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
Author: Dicaste,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-07 20:25:41

Jeśli chcesz wyliczyć ciąg liczb (IEnumerable<int>) z 0 do zmiennej end, spróbuj

Enumerable.Range(0, ++end);

W wyjaśnieniu, aby uzyskać ciąg liczb od 0 do 1000, chcesz, aby ciąg zaczynał się od 0 (pamiętając, że istnieje 1001 liczb od 0 do 1000, włącznie).


Jeśli chcesz mieć nieograniczony szereg liniowy, możesz napisać funkcję jak

IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
    while (true)
    {
        yield return k;
        k = (c * k) + n;
    }
}

Które można użyć jak

var ZeroTo1000 = Series().Take(1001);

Jeśli chcesz mieć funkcję, możesz wielokrotnie wywoływać generowanie liczb przyrostowych, być może chcesz coś jak.

using System.Threading;

private static int orderNumber = 0;

int Seq()
{
    return Interlocked.Increment(ref orderNumber);
}

Po wywołaniu Seq() zwróci następny numer zamówienia i zwiększy licznik.

 0
Author: Jodrell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-10 14:32:51

Projekcja Linq z rzadko używanym przeciążeniem indeksera (i):

(new int[11]).Select((o,i) => i)

Wolę tę metodę ze względu na jej elastyczność.

Na przykład, jeśli chcę wyrównać:

(new int[11]).Select((item,i) => i*2)

Lub jeśli chcę 5 minutowych przyrostów o godzinę:

(new int[12]).Select((item,i) => i*5)

Lub struny:

(new int[12]).Select((item,i) => "Minute:" + i*5)
 0
Author: b_levitt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-03 13:47:51