Bagaimana cara memesan List <string>?

Jawaban:

238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();
daryal
sumber
@Servy satu alasan untuk menggunakan OrderBy adalah karena ListaServizi tidak memiliki metode Sortir karena dideklarasikan sebagai IList<string>. Kode ini sebenarnya akan berfungsi seperti yang tertulis, tidak seperti jawaban yang menerima lebih banyak suara positif ListaServizi.Sort(). Saya tidak mengatakan ini adalah solusi yang akan saya pilih, tetapi ini sebenarnya satu-satunya jawaban yang benar ketika saya memposting jawaban saya.
phoog
Jika bukan solusi yang Anda pilih, mengapa mengusulkannya sebagai jawaban? Usulkan apa yang akan Anda lakukan sebagai jawabannya; jika itu berarti mengubah tipe dari IList ke List sehingga Anda dapat memanggilnya .Sort, lalu mengapa tidak melakukannya.
Pelayanan
1
@Servy Dia memecahkan masalah tanpa mengubah spesifikasi masalah. Sejauh ini, itulah cara yang disukai. Selain itu, pernyataan masalah menggunakan antarmuka di atas pola implementasi, yang sangat penting. Mengusulkan perubahan jenis Daftar benar, tetapi harus dilakukan sebagai jawaban alternatif, setelah jawaban yang benar, karena perlu mengubah masalah.
Aurelien Ribon
1
@ AurélienRibon Tidak ada pernyataan masalah yang mengatakan bahwa tipe variabel tidak dapat diubah. Persyaratan tersebut sangat spesifik untuk menyortir a List. Dan biaya yang terkait dengan jawaban ini tidak sepele dan juga tidak perlu. Ini benar-benar tidak menghasilkan apa-apa . Ini menambah kerumitan pada kode, kurang ringkas, kurang efisien, tidak ada yang lain selain kerugian di sini.
Pelayanan
45

Anda dapat menggunakan Sort

List<string> ListaServizi = new List<string>() { };
ListaServizi.Sort();
Richard Dalton
sumber
12

Jawaban lain benar untuk disarankan Sort, tetapi mereka tampaknya melewatkan fakta bahwa lokasi penyimpanan diketik sebagai IList<string. Sortbukan bagian dari antarmuka.

Jika Anda tahu itu ListaServiziakan selalu berisi List<string>, Anda bisa mengubah tipe yang dideklarasikan, atau menggunakan cast. Jika Anda tidak yakin, Anda dapat menguji jenisnya:

if (typeof(List<string>).IsAssignableFrom(ListaServizi.GetType()))
    ((List<string>)ListaServizi).Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Mungkin lebih idiomatis:

List<string> typeCheck = ListaServizi as List<string>;
if (typeCheck != null)
    typeCheck.Sort();
else
{
    //... some other solution; there are a few to choose from.
}

Jika Anda tahu bahwa ListaServiziterkadang akan mengadakan implementasi yang berbeda dari IList<string>, tinggalkan komentar, dan saya akan menambahkan satu atau dua saran untuk menyortirnya.

phoog
sumber
5
ListaServizi.Sort();

Akan melakukannya untuk Anda. Ini cukup mudah dengan daftar string. Anda harus sedikit lebih pintar dalam menyortir objek.

Ste
sumber
3
ListaServiziadalah IList<string>; antarmuka tidak memiliki Sortmetode. Anda setidaknya membutuhkan pemeran di sini.
phoog
3
List<string> myCollection = new List<string>()
{
    "Bob", "Bob","Alex", "Abdi", "Abdi", "Bob", "Alex", "Bob","Abdi"
};

myCollection.Sort();
foreach (var name in myCollection.Distinct())
{
    Console.WriteLine(name + " " + myCollection.Count(x=> x == name));
}

keluaran: Abdi 3 Alex 2 Bob 4

Abdi
sumber