Nota: Esto crea una secuencia que comienza en 0 con 10 elementos (termina en 9). Si desea de 0 a 10, el segundo parámetro sería 11. Y si necesita una matriz real y no IEnumerable<int>, incluya una llamada .ToArray().
Anthony Pegram
39
Enumerable.Range(0,11);
Genera una secuencia de números enteros dentro de un rango especificado.
Por "más complicado", ¿te refieres simplemente a "dónde tienes a mano el comienzo y el final en lugar del número de elementos"? De lo contrario, me estoy perdiendo tu significado. 🤔
ruffin
1
Creo que estaba considerando OddSequenceEvenSequenceotros rangos personalizados. if (++n1 % 2 == 0) yield return n1, por ejemplo. Han pasado unos días;)
Josiah Ruddell
Ja, sí, uno o dos días, supongo. O algunos miles. ; ^)
var seq =0..2;var array =newstring[]{"First","Second","Third",};foreach(var s in array[seq]){System.Console.WriteLine(s);}// Output: First, Second
O si desea crear IEnumerable<int>, puede usar la extensión:
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
PD: Pero ten cuidado con los "índices desde el final" . Por ejemplo, el método de extensión ToEnumerable no funciona con var seq = ^2..^0.
Si desea enumerar una secuencia de números ( IEnumerable<int>) desde 0una variable end, intente
Enumerable.Range(0,++10);
En explicación, para obtener una secuencia de números del 0 al 10, desea que la secuencia comience en 0 (recordando que hay 11 números entre 0 y 10, inclusive).
Si desea una serie lineal ilimitada, puede escribir una función como
IEnumerable<int>Series(int k =0,int n =1,int c =1){while(true){yieldreturn k;
k =(c * k)+ n;}}
que podrías usar como
varZeroTo1000=Series().Take(11);
Si desea una función a la que pueda llamar repetidamente para generar números crecientes, tal vez desee 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>
, incluya una llamada.ToArray()
.Genera una secuencia de números enteros dentro de un rango especificado.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
fuente
Podría crear una función simple. Esto funcionaría para una secuencia más complicada. De lo contrario,
Enumerable.Range
debería hacerlo.fuente
OddSequence
EvenSequence
otros rangos personalizados.if (++n1 % 2 == 0) yield return n1
, por ejemplo. Han pasado unos días;)Proyección de LINQ con el rara vez se utiliza la sobrecarga indexador (i) :
Prefiero este método por su flexibilidad.
Por ejemplo, si quiero pares:
O si quiero incrementos de 5 minutos de una hora:
O cuerdas:
fuente
En C # 8.0 puede usar índices y rangos
Por ejemplo:
O si desea crear
IEnumerable<int>
, puede usar la extensión:PD: Pero ten cuidado con los "índices desde el final" . Por ejemplo, el método de extensión ToEnumerable no funciona con
var seq = ^2..^0
.fuente
Mi implementación:
fuente
Originalmente respondido aquí .
Si desea enumerar una secuencia de números (
IEnumerable<int>
) desde0
una variableend
, intenteEn explicación, para obtener una secuencia de números del 0 al 10, desea que la secuencia comience en 0 (recordando que hay 11 números entre 0 y 10, inclusive).
Si desea una serie lineal ilimitada, puede escribir una función como
que podrías usar como
Si desea una función a la que pueda llamar repetidamente para generar números crecientes, tal vez desee algo como.
Cuando llame
Seq()
, devolverá el siguiente número de pedido e incrementará el contador.fuente
Tengo estas funciones en mi código
Esto ayuda a reducir algo de código para (i).
fuente