Uwaga: Tworzy to sekwencję zaczynającą się od 0 z 10 elementami (kończącą się na 9). Jeśli chcesz mieć od 0 do 10, drugi parametr będzie miał wartość 11. A jeśli potrzebujesz rzeczywistej tablicy, a nie IEnumerable<int>, dołącz wywołanie .ToArray().
Anthony Pegram,
39
Enumerable.Range(0,11);
Generuje sekwencję liczb całkowitych w określonym zakresie.
Czy przez „bardziej skomplikowane” masz na myśli tylko „miejsce, w którym zacząłeś i kończysz poręczny zamiast liczby elementów”? W przeciwnym razie brakuje mi twojego znaczenia. 🤔
ruffin
1
Myślę, że rozważałem OddSequenceEvenSequencelub inne niestandardowe zakresy. if (++n1 % 2 == 0) yield return n1, na przykład. Minęło już kilka dni;)
Josiah Ruddell
Ha, tak, chyba jeden lub dwa dni. Albo kilka tysięcy. ; ^)
var seq =0..2;var array =newstring[]{"First","Second","Third",};foreach(var s in array[seq]){System.Console.WriteLine(s);}// Output: First, Second
Lub jeśli chcesz stworzyć IEnumerable<int>, możesz użyć rozszerzenia:
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 Ale uważaj na „indeksy od końca” . Na przykład metoda rozszerzenia ToEnumerable nie działa z var seq = ^2..^0.
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>
, dołącz wywołanie.ToArray()
.Generuje sekwencję liczb całkowitych w określonym zakresie.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
źródło
Możesz stworzyć prostą funkcję. To zadziałałoby w przypadku bardziej skomplikowanej sekwencji. W przeciwnym razie
Enumerable.Range
powinno wystarczyć.źródło
OddSequence
EvenSequence
lub inne niestandardowe zakresy.if (++n1 % 2 == 0) yield return n1
, na przykład. Minęło już kilka dni;)Projekcja Linq z rzadko używanym przeciążeniem indeksatora (i) :
Wolę tę metodę ze względu na jej elastyczność.
Na przykład, jeśli chcę parzyste:
Lub jeśli chcę 5-minutowe odstępy co godzinę:
Lub struny:
źródło
W C # 8.0 możesz używać indeksów i zakresów
Na przykład:
Lub jeśli chcesz stworzyć
IEnumerable<int>
, możesz użyć rozszerzenia:PS Ale uważaj na „indeksy od końca” . Na przykład metoda rozszerzenia ToEnumerable nie działa z
var seq = ^2..^0
.źródło
Moja realizacja:
źródło
Pierwotnie odpowiedział tutaj .
Jeśli chcesz wyliczyć sekwencję liczb (
IEnumerable<int>
) od0
do zmiennejend
, spróbujAby uzyskać ciąg liczb od 0 do 10, chcesz, aby ciąg zaczynał się od 0 (pamiętając, że istnieje 11 liczb od 0 do 10 włącznie).
Jeśli chcesz mieć nieograniczony szereg liniowy, możesz napisać funkcję taką jak
których możesz użyć jak
Jeśli potrzebujesz funkcji, którą możesz wywoływać wielokrotnie, aby wygenerować rosnące liczby, być może potrzebujesz czegoś podobnego.
Kiedy zadzwonisz
Seq()
, zwróci następny numer zamówienia i zwiększy licznik.źródło
Mam te funkcje w swoim kodzie
Pomaga to zmniejszyć część kodu dla (i).
źródło