C # Syntax - Pisahkan String menjadi Array dengan Comma, Convert To Generic List, dan Reverse Order


92

Apa sintaks yang benar untuk ini:

IList<string> names = "Tom,Scott,Bob".Split(',').ToList<string>().Reverse();

Apa yang saya lakukan? Apa TSource artinya?

Jawaban:


254

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.


25
skeet adalah binatang!
daging

2
diuraikan dengan baik, saya sangat menghargai!
Gaurav Aroraa

11

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 ...


Ini tidak akan berfungsi jika Anda memiliki "Tom Cruise" dan bukan hanya Tom
membakar

4
List<string> names = "Tom,Scott,Bob".Split(',').Reverse().ToList();

Yang ini berhasil.


2

Coba ini:

List<string> names = new List<string>("Tom,Scott,Bob".Split(','));
names.Reverse();

Saya mendapatkan kesalahan - Tidak dapat secara implisit mengubah jenis 'void' menjadi 'System.Collections.Generic.List <string>
BuddyJoe

1

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


1

Jika Anda mencoba

  1. Gunakan beberapa pembatas
  2. Filter string kosong apa pun
  3. Pangkas spasi di depan / di belakang

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

  • Tom
  • Pelayaran
  • Scott
  • Bob
  • di

Sekarang Anda jelas dapat membalik urutan seperti yang disarankan orang lain.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.