Как создать массив с последовательностью целых чисел в C #? - PullRequest
103 голосов
/ 04 января 2011

F # имеет последовательностей , что позволяет создавать последовательности:

seq { 0 .. 10 }

Создать последовательность чисел от 0 до 10.

Есть ли что-то похожее в C #?

Ответы [ 6 ]

187 голосов
/ 04 января 2011

Вы можете использовать Enumerable.Range(0, 10);.Пример:

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

Страница MSDN здесь .

33 голосов
/ 04 января 2011
Enumerable.Range(0, 11);

Создает последовательность целых чисел в указанном диапазоне.

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

18 голосов
/ 04 января 2011

Вы можете создать простую функцию.Это будет работать для более сложной последовательности.В противном случае Enumerable.Range должен делать.

IEnumerable<int> Sequence(int n1, int n2)
{
    while (n1 <= n2)
    {
        yield return  n1++;
    }
}
3 голосов
/ 03 октября 2018

проекция Linq с редко используемой перегрузкой индексатора (i) :

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

Я предпочитаю этот метод за его гибкость.

Например, если я хочу вечера:

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

Или, если я хочу 5-минутные приращения часа:

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

Или строки:

(new int[12]).Select((item,i) => "Minute:" + i*5)
1 голос
/ 07 июня 2016

Моя реализация:

    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;
        }
    }
0 голосов
/ 10 апреля 2018

Если вы хотите перечислить последовательность чисел (IEnumerable<int>) от 0 до переменной end, тогда попробуйте

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(), он вернет номер следующего заказа и увеличит счетчик.

...