Nota: Isso cria uma sequência começando em 0 com 10 itens (terminando em 9). Se você quiser de 0 a 10, o segundo parâmetro será 11. E se você precisar de uma matriz real e não IEnumerable<int>, inclua uma chamada .ToArray().
Anthony Pegram
39
Enumerable.Range(0,11);
Gera uma sequência de números inteiros dentro de um intervalo especificado.
Por "mais complicado", você quer dizer apenas "onde você começou e terminou à mão em vez do número de elementos"? Caso contrário, estou perdendo o seu significado. 🤔
ruffin
1
Eu acredito que estava considerando OddSequenceEvenSequenceou outros intervalos personalizados. if (++n1 % 2 == 0) yield return n1, por exemplo. Já se passaram alguns dias;)
Josiah Ruddell
Ha, sim, um ou dois dias, suponho. Ou alguns milhares. ; ^)
var seq =0..2;var array =newstring[]{"First","Second","Third",};foreach(var s in array[seq]){System.Console.WriteLine(s);}// Output: First, Second
Ou se você quiser criar IEnumerable<int>, você pode usar a extensão:
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 Mas tenha cuidado com os 'índices do fim' . Por exemplo, o método de extensão ToEnumerable não está funcionando var seq = ^2..^0.
Se você quiser enumerar uma sequência de números ( IEnumerable<int>) de 0para uma variável end, tente
Enumerable.Range(0,++10);
Na explicação, para obter uma sequência de números de 0 a 10, você deseja que a sequência comece em 0 (lembrando que existem 11 números entre 0 e 10, inclusive).
Se você quiser uma série linear ilimitada, pode escrever uma função como
IEnumerable<int>Series(int k =0,int n =1,int c =1){while(true){yieldreturn k;
k =(c * k)+ n;}}
que você poderia usar como
varZeroTo1000=Series().Take(11);
Se você quiser uma função que possa chamar repetidamente para gerar números crescentes, talvez queira algo como.
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>
, inclua uma chamada.ToArray()
.Gera uma sequência de números inteiros dentro de um intervalo especificado.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
fonte
Você pode criar uma função simples. Isso funcionaria para uma sequência mais complicada. Caso contrário, o
Enumerable.Range
deve servir.fonte
OddSequence
EvenSequence
ou outros intervalos personalizados.if (++n1 % 2 == 0) yield return n1
, por exemplo. Já se passaram alguns dias;)Projeção Linq com a sobrecarga do indexador raramente usada (i) :
Eu prefiro este método por sua flexibilidade.
Por exemplo, se eu quiser pares:
Ou se eu quiser incrementos de 5 minutos de uma hora:
Ou strings:
fonte
Em C # 8.0 você pode usar índices e intervalos
Por exemplo:
Ou se você quiser criar
IEnumerable<int>
, você pode usar a extensão:PS Mas tenha cuidado com os 'índices do fim' . Por exemplo, o método de extensão ToEnumerable não está funcionando
var seq = ^2..^0
.fonte
Minha implementação:
fonte
Respondido originalmente aqui .
Se você quiser enumerar uma sequência de números (
IEnumerable<int>
) de0
para uma variávelend
, tenteNa explicação, para obter uma sequência de números de 0 a 10, você deseja que a sequência comece em 0 (lembrando que existem 11 números entre 0 e 10, inclusive).
Se você quiser uma série linear ilimitada, pode escrever uma função como
que você poderia usar como
Se você quiser uma função que possa chamar repetidamente para gerar números crescentes, talvez queira algo como.
Quando você ligar,
Seq()
ele retornará o próximo número do pedido e aumentará o contador.fonte
Eu tenho essas funções no meu código
Isso ajuda a reduzir parte do código (i).
fonte