Làm cách nào để đặt một Danh sách <chuỗi>?


121

Tôi có cái này List<string>:

IList<string> ListaServizi = new List<string>();

Làm thế nào tôi có thể sắp xếp nó theo thứ tự bảng chữ cái và tăng dần?




Phương pháp sắp xếp; kết hợp với Đảo ngược nếu bạn cũng cần giảm dần
Nathan Q

Câu trả lời:


238
ListaServizi = ListaServizi.OrderBy(q => q).ToList();

@Servy một lý do để sử dụng OrderBy là ListaServizi không có phương thức Sắp xếp vì nó được khai báo là IList<string>. Mã này thực sự sẽ hoạt động như được viết, không giống như các câu trả lời nhận được nhiều phiếu tán thành hơn ListaServizi.Sort(). Tôi không nói rằng đây là giải pháp tôi sẽ chọn, nhưng đây thực sự là câu trả lời đúng duy nhất khi tôi đăng câu trả lời của mình.
phoog

Nếu đó không phải là giải pháp bạn chọn thì tại sao lại đề xuất nó như một câu trả lời? Đề xuất những gì bạn sẽ làm như câu trả lời; nếu điều đó có nghĩa là thay đổi loại từ IList thành Danh sách để bạn có thể gọi .Sortnó, thì tại sao không làm điều đó.
Servy

1
@Servy Anh ấy đã giải quyết vấn đề mà không thay đổi đặc điểm kỹ thuật của vấn đề. Đó là cách ưa thích, cho đến nay. Hơn nữa, câu lệnh vấn đề sử dụng giao diện trên mẫu thực thi, điều này rất quan trọng. Đề xuất thay đổi loại Danh sách là đúng, nhưng nên được thực hiện như một câu trả lời thay thế, sau câu trả lời đúng, vì nó yêu cầu thay đổi vấn đề.
Aurelien Ribon

1
@ AurélienRibon Không có gì về câu lệnh vấn đề nói rằng kiểu của biến không thể thay đổi. Các yêu cầu rất cụ thể để sắp xếp a List. Và chi phí liên quan đến câu trả lời này là không nhỏ và cũng không cần thiết. Nó thực sự không thu được . Nó làm tăng thêm độ phức tạp cho mã, nó kém ngắn gọn hơn, kém hiệu quả hơn, không có gì khác ngoài nhược điểm ở đây.
Servy


12

Các câu trả lời khác là chính xác để đề xuất Sort, nhưng họ dường như đã bỏ lỡ thực tế là vị trí lưu trữ được nhập là IList<string. Sortkhông phải là một phần của giao diện.

Nếu bạn biết rằng ListaServizisẽ luôn chứa a List<string>, bạn có thể thay đổi kiểu đã khai báo của nó hoặc sử dụng kiểu ép kiểu. Nếu bạn không chắc chắn, bạn có thể kiểm tra loại:

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

Có lẽ thành ngữ hơn:

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

Nếu bạn biết rằng ListaServiziđôi khi sẽ tổ chức một cách triển khai khác IList<string>, hãy để lại nhận xét và tôi sẽ thêm một hoặc hai đề xuất để sắp xếp nó.


5
ListaServizi.Sort();

Sẽ làm điều đó cho bạn. Nó đủ đơn giản với một danh sách các chuỗi. Bạn cần phải thông minh hơn một chút nếu phân loại đồ vật.


3
ListaServiziIList<string>; giao diện không có Sortphương thức. Bạn ít nhất cần một diễn viên ở đây.
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));
}

đầu ra: Abdi 3 Alex 2 Bob 4

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.