Примечание. Это создает последовательность, начинающуюся с 0 и состоящую из 10 элементов (заканчивающуюся 9). Если вы хотите от 0 до 10, вторым параметром будет 11. И если вам нужен реальный массив, а нет IEnumerable<int>, включите вызов .ToArray().
Энтони Пеграм,
39
Enumerable.Range(0,11);
Создает последовательность целых чисел в указанном диапазоне.
Под «более сложным» вы имеете в виду просто «где у вас есть начало и конец, а не количество элементов»? В противном случае я упускаю ваш смысл. 🤔
ruffin
1
Я полагаю, что рассматривал OddSequenceEvenSequenceили другие настраиваемые диапазоны. if (++n1 % 2 == 0) yield return n1, например. Прошло несколько дней;)
Джозайя Радделл
Ха, да, один или два дня, я полагаю. Или несколько тысяч. ; ^)
var seq =0..2;var array =newstring[]{"First","Second","Third",};foreach(var s in array[seq]){System.Console.WriteLine(s);}// Output: First, Second
Или, если вы хотите создать, IEnumerable<int>вы можете использовать расширение:
publicstaticIEnumerable<int>ToEnumerable(thisRange range){for(var i = range.Start.Value; i < range.End.Value; i++){yieldreturn 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){yieldreturn k;
k =(c * k)+ n;}}
который вы могли бы использовать как
varZeroTo1000=Series().Take(11);
Если вам нужна функция, которую можно вызывать несколько раз для генерации увеличивающихся чисел, возможно, вам нужно что-то вроде.
privatestaticIEnumerable<int>FromZero(thisint count){if(count <=0)yieldbreak;for(var i =0; i < count; i++){yieldreturn i;}}privatestaticIEnumerable<int>FromOne(thisint count){if(count <=0)yieldbreak;for(var i =1; i <= count; i++){yieldreturn i;}}
IEnumerable<int>
, включите вызов.ToArray()
.Создает последовательность целых чисел в указанном диапазоне.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
источник
Вы можете создать простую функцию. Это подойдет для более сложной последовательности. В противном случае так и
Enumerable.Range
должно быть.источник
OddSequence
EvenSequence
или другие настраиваемые диапазоны.if (++n1 % 2 == 0) yield return n1
, например. Прошло несколько дней;)Проекция Linq с редко используемой перегрузкой индексатора (i) :
Я предпочитаю этот метод из-за его гибкости.
Например, если я хочу эвенов:
Или, если мне нужно 5-минутное приращение часа:
Или струны:
источник
В C # 8.0 вы можете использовать индексы и диапазоны
Например:
Или, если вы хотите создать,
IEnumerable<int>
вы можете использовать расширение:PS Но будьте осторожны с «индексами с конца» . Например, метод расширения ToEnumerable не работает с
var seq = ^2..^0
.источник
Моя реализация:
источник
Первоначально ответили здесь .
Если вы хотите перечислить последовательность чисел (
IEnumerable<int>
) от0
до переменнойend
, попробуйтеВ пояснении, чтобы получить последовательность чисел от 0 до 10, вы хотите, чтобы последовательность начиналась с 0 (помня, что существует 11 чисел от 0 до 10 включительно).
Если вам нужен неограниченный линейный ряд, вы можете написать такую функцию, как
который вы могли бы использовать как
Если вам нужна функция, которую можно вызывать несколько раз для генерации увеличивающихся чисел, возможно, вам нужно что-то вроде.
При вызове
Seq()
он вернет номер следующего заказа и увеличит счетчик.источник
В моем коде есть эти функции
Это помогает сократить часть кода for (i).
источник