Catatan: Ini membuat urutan mulai dari 0 dengan 10 item (berakhir pada 9). Jika Anda menginginkan 0 hingga 10, parameter kedua adalah 11. Dan jika Anda membutuhkan array aktual dan tidak IEnumerable<int>, sertakan panggilan .ToArray().
Anthony Pegram
39
Enumerable.Range(0,11);
Menghasilkan urutan bilangan integral dalam rentang tertentu.
Yang Anda maksud dengan "lebih rumit" adalah "di mana Anda memiliki awal dan akhir yang berguna alih-alih jumlah elemen"? Kalau tidak, aku kehilangan maksudmu. 🤔
ruffin
1
Saya yakin saya sedang mempertimbangkan OddSequenceEvenSequenceatau rentang khusus lainnya. if (++n1 % 2 == 0) yield return n1, sebagai contoh. Sudah beberapa hari;)
Josiah Ruddell
Ha, ya, satu atau dua hari kurasa. Atau beberapa ribu. ; ^)
var seq =0..2;var array =newstring[]{"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:
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 Tapi hati-hati dengan 'indeks dari akhir' . Misalnya, metode ekstensi ToEnumerable tidak berfungsi var seq = ^2..^0.
Jika Anda ingin menghitung urutan angka ( IEnumerable<int>) dari 0variabel 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){yieldreturn k;
k =(c * k)+ n;}}
yang bisa Anda gunakan seperti
varZeroTo1000=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.
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>
, sertakan panggilan.ToArray()
.Menghasilkan urutan bilangan integral dalam rentang tertentu.
http://msdn.microsoft.com/en-us/library/system.linq.enumerable.range.aspx
sumber
Anda bisa membuat fungsi sederhana. Ini akan bekerja untuk urutan yang lebih rumit. Jika tidak, yang
Enumerable.Range
seharusnya dilakukan.sumber
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) :
Saya lebih suka metode ini karena fleksibilitasnya.
Misalnya, jika saya ingin genap:
Atau jika saya ingin kenaikan 5 menit dalam satu jam:
Atau string:
sumber
Di C # 8.0 Anda dapat menggunakan Indeks dan rentang
Sebagai contoh:
Atau jika Anda ingin membuat
IEnumerable<int>
maka Anda dapat menggunakan extension:PS Tapi hati-hati dengan 'indeks dari akhir' . Misalnya, metode ekstensi ToEnumerable tidak berfungsi
var seq = ^2..^0
.sumber
Implementasi saya:
sumber
Awalnya dijawab di sini .
Jika Anda ingin menghitung urutan angka (
IEnumerable<int>
) dari0
variabelend
, cobalahDalam 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
yang bisa Anda gunakan seperti
Jika Anda menginginkan suatu fungsi yang dapat Anda panggil berulang kali untuk menghasilkan angka yang bertambah, mungkin Anda menginginkan sesuatu seperti itu.
Ketika Anda memanggilnya,
Seq()
itu akan mengembalikan nomor pesanan berikutnya dan menambah konter.sumber
Saya memiliki fungsi-fungsi ini dalam kode saya
Ini membantu mengurangi beberapa untuk (i) kode.
sumber