Відповіді:
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)
Або якщо я хочу 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 (пам'ятаючи, що 11 чисел між 0 і 10 включно).
Якщо потрібно необмежений лінійний ряд, ви можете написати таку функцію, як
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;
}
}
Це допомагає зменшити деякі для (i) коду.
IEnumerable<int>
, включіть виклик.ToArray()
.