Jawaban:
Enumerable.Range(0, 11);
Menghasilkan urutan bilangan integral dalam rentang tertentu.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
Anda bisa membuat fungsi sederhana. Ini akan bekerja untuk urutan yang lebih rumit. Jika tidak, yang Enumerable.Range
seharusnya dilakukan.
IEnumerable<int> Sequence(int n1, int n2)
{
while (n1 <= n2)
{
yield return n1++;
}
}
OddSequence
EvenSequence
atau rentang khusus lainnya. if (++n1 % 2 == 0) yield return n1
, sebagai contoh. Sudah beberapa hari;)
Proyeksi Linq dengan overload pengindeks yang jarang digunakan (i) :
(new int[11]).Select((o,i) => i)
Saya lebih suka metode ini karena fleksibilitasnya.
Misalnya, jika saya ingin genap:
(new int[11]).Select((item,i) => i*2)
Atau jika saya ingin kenaikan 5 menit dalam satu jam:
(new int[12]).Select((item,i) => i*5)
Atau string:
(new int[12]).Select((item,i) => "Minute:" + i*5)
Di C # 8.0 Anda dapat menggunakan Indeks dan rentang
Sebagai contoh:
var seq = 0..2;
var array = new string[]
{
"First",
"Second",
"Third",
};
foreach(var s in array[seq])
{
System.Console.WriteLine(s);
}
// Output: First, Second
Atau jika Anda ingin membuat IEnumerable<int>
maka Anda dapat menggunakan extension:
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
PS Tapi hati-hati dengan 'indeks dari akhir' . Misalnya, metode ekstensi ToEnumerable tidak berfungsi var seq = ^2..^0
.
Awalnya dijawab di sini .
Jika Anda ingin menghitung urutan angka ( IEnumerable<int>
) dari 0
variabel end
, cobalah
Enumerable.Range(0, ++10);
Dalam penjelasannya, untuk mendapatkan urutan angka dari 0 sampai 10, Anda ingin urutannya dimulai dari 0 (ingat bahwa ada 11 angka antara 0 dan 10, inklusif).
Jika Anda menginginkan rangkaian linier tak terbatas, Anda dapat menulis fungsi seperti
IEnumerable<int> Series(int k = 0, int n = 1, int c = 1)
{
while (true)
{
yield return k;
k = (c * k) + n;
}
}
yang bisa Anda gunakan seperti
var ZeroTo1000 = Series().Take(11);
Jika Anda menginginkan suatu fungsi yang dapat Anda panggil berulang kali untuk menghasilkan angka yang bertambah, mungkin Anda menginginkan sesuatu seperti itu.
using System.Threading;
private static int orderNumber = 0;
int Seq()
{
return Interlocked.Increment(ref orderNumber);
}
Ketika Anda memanggilnya, Seq()
itu akan mengembalikan nomor pesanan berikutnya dan menambah konter.
Saya memiliki fungsi-fungsi ini dalam kode saya
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;
}
}
Ini membantu mengurangi beberapa untuk (i) kode.
IEnumerable<int>
, sertakan panggilan.ToArray()
.