Respuestas:
Enumerable.Range(0, 11);
Genera una secuencia de números enteros dentro de un rango especificado.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
Podría crear una función simple. Esto funcionaría para una secuencia más complicada. De lo contrario, Enumerable.Range
debería hacerlo.
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
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) :
(new int[11]).Select((o,i) => i)
Prefiero este método por su flexibilidad.
Por ejemplo, si quiero pares:
(new int[11]).Select((item,i) => i*2)
O si quiero incrementos de 5 minutos de una hora:
(new int[12]).Select((item,i) => i*5)
O cuerdas:
(new int[12]).Select((item,i) => "Minute:" + i*5)
En C # 8.0 puede usar índices y rangos
Por ejemplo:
var seq = 0..2;
var array = new string[]
{
"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:
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
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
.
Originalmente respondido aquí .
Si desea enumerar una secuencia de números ( IEnumerable<int>
) desde 0
una 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)
{
yield return k;
k = (c * k) + n;
}
}
que podrías usar como
var ZeroTo1000 = Series().Take(11);
Si desea una función a la que pueda llamar repetidamente para generar números crecientes, tal vez desee algo como.
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
Cuando llame Seq()
, devolverá el siguiente número de pedido e incrementará el contador.
Tengo estas funciones en mi código
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;
}
}
Esto ayuda a reducir algo de código para (i).
IEnumerable<int>
, incluya una llamada.ToArray()
.