Apa sintaks yang benar untuk ini:
IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();
Apa yang saya lakukan? Apa TSource artinya?
Jawaban:
Masalahnya adalah Anda menelepon List<T>.Reverse()
yang kembali void
.
Anda bisa melakukan:
List<string> names = "Tom,Scott,Bob".Split(',').ToList<string>();
names.Reverse();
atau:
IList<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>();
Yang terakhir lebih mahal, karena membalikkan sewenang-wenang IEnumerable<T>
melibatkan buffering semua data dan kemudian menghasilkan semuanya - sedangkan List<T>
dapat melakukan semua pembalikan "di tempat". (Perbedaannya di sini adalah ia memanggil Enumerable.Reverse<T>()
metode ekstensi, bukan List<T>.Reverse()
metode instance.)
Lebih efisien lagi, Anda dapat menggunakan:
string[] namesArray = "Tom,Scott,Bob".Split(',');
List<string> namesList = new List<string>(namesArray.Length);
namesList.AddRange(namesArray);
namesList.Reverse();
Hal ini untuk menghindari pembuatan buffer dengan ukuran yang tidak tepat - dengan biaya mengambil empat pernyataan yang akan dilakukan ... Seperti biasa, pertimbangkan keterbacaan terhadap kinerja dalam kasus penggunaan yang sebenarnya.
Saya menyadari bahwa pertanyaan ini cukup lama, tetapi saya memiliki masalah serupa, kecuali string saya memiliki spasi di dalamnya. Bagi mereka yang perlu mengetahui cara memisahkan string dengan lebih dari sekadar koma:
string str = "Tom, Scott, Bob";
IList<string> names = str.Split(new string[] {","," "},
StringSplitOptions.RemoveEmptyEntries);
StringSplitOptions menghapus rekaman yang hanya berupa karakter spasi ...
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();
Yang ini berhasil.
Apa yang Anda lewatkan di sini adalah bahwa .Reverse () adalah metode kosong. Tidak mungkin untuk menetapkan hasil .Reverse () ke variabel. Namun Anda dapat mengubah urutan untuk menggunakan Enumerable.Reverse () dan mendapatkan hasil Anda
var x = "Tom,Scott,Bob".Split(',').Reverse().ToList<string>()
Perbedaannya adalah bahwa Enumerable.Reverse () mengembalikan IEnumerable <T> alih-alih menjadi void return
Jika Anda mencoba
berikut ini harus bekerja:
string str = "Tom Cruise, Scott, ,Bob | at";
IEnumerable<string> names = str
.Split(new char[]{',', '|'})
.Where(x=>x!=null && x.Trim().Length > 0)
.Select(x=>x.Trim());
Keluaran
Sekarang Anda jelas dapat membalik urutan seperti yang disarankan orang lain.