web-dev-qa-db-fra.com

Comment créer un tableau avec une séquence d'entiers en C #?

F # a séquences qui permet de créer des séquences:

seq { 0 .. 10 }

Créez une séquence de nombres de 0 à 10.

Y a-t-il quelque chose de similaire en C #?

96
Budda

Vous pouvez utiliser Enumerable.Range(0, 10);. Exemple:

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

Page MSDN ici .

174
alexn
Enumerable.Range(0, 11);

Génère une séquence de nombres entiers dans une plage spécifiée.

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

29
Pauli Østerø

Vous pouvez créer une fonction simple. Cela fonctionnerait pour une séquence plus compliquée. Sinon, le Enumerable.Range devrait faire l'affaire.

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

Projection Linq avec la surcharge rarement utilisée indexer (i) :

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

Je préfère cette méthode pour sa flexibilité.

Par exemple, si je veux un peu:

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

Ou si je veux des incréments d’heure de 5 minutes:

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

Ou des cordes:

(new int[12]).Select((item,i) => "Minute:" + i*5)
2
b_levitt

Ma mise en oeuvre:

    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

Si vous souhaitez énumérer une séquence de nombres (IEnumerable<int>) de 0 à une variable end, essayez alors

Enumerable.Range(0, ++end);

En explication, pour obtenir une séquence de nombres de 0 à 1000, vous voulez que la séquence commence à 0 (en gardant à l'esprit qu'il existe 1001 nombres compris entre 0 et 1000, inclus).


Si vous voulez une série linéaire illimitée, vous pouvez écrire une fonction comme

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

que vous pourriez utiliser comme

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

Si vous voulez une fonction que vous pouvez appeler plusieurs fois pour générer des numéros incrémentiels, vous voulez peut-être quelque chose comme.

using System.Threading;

private static int orderNumber = 0;

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

Lorsque vous appelez Seq(), le numéro de commande suivant sera renvoyé et le compteur sera incrémenté.

0
Jodrell