ฉันจะสั่งซื้อ List <string> ได้อย่างไร?


122

ฉันมีสิ่งนี้List<string>:

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

ฉันจะเรียงลำดับตามตัวอักษรและจากน้อยไปมากได้อย่างไร?


4
คุณลอง.Sort msdn.microsoft.com/en-us/library/b0zbh7b6%28v=vs.90%29.aspxหรือยัง
Matthew


วิธีการจัดเรียง; เมื่อใช้ร่วมกับ Reverse ถ้าคุณต้องการจากน้อยไปมาก
Nathan Q

คำตอบ:


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

@Servy เหตุผลหนึ่งที่ต้องใช้ OrderBy ก็คือ ListaServizi ไม่มีวิธีการเรียงลำดับเนื่องจากมีการประกาศเป็นIList<string>ไฟล์. รหัสนี้จริงจะทำงานตามที่เขียนไว้แตกต่างจากคำตอบที่ได้รับ upvotes ListaServizi.Sort()มากขึ้นด้วย ฉันไม่ได้บอกว่านี่เป็นวิธีแก้ปัญหาที่ฉันเลือก แต่นี่เป็นคำตอบเดียวที่ถูกต้องเมื่อฉันโพสต์คำตอบของฉัน
กลัว

หากไม่ใช่ทางออกที่คุณเลือกทำไมจึงเสนอเป็นคำตอบ เสนอสิ่งที่คุณทำเพื่อเป็นคำตอบ หากนั่นหมายถึงการเปลี่ยนประเภทจาก IList เป็น List เพื่อให้คุณสามารถเรียก.Sortใช้งานได้ทำไมไม่ทำเช่นนั้น
Servy

1
@Servy เขาแก้ปัญหาโดยไม่เปลี่ยนสเปคปัญหา นั่นเป็นวิธีที่ดีที่สุด ยิ่งไปกว่านั้นคำชี้แจงปัญหายังใช้อินเทอร์เฟซมากกว่ารูปแบบการนำไปใช้งานซึ่งสำคัญมาก การเสนอการเปลี่ยนแปลงประเภทรายการนั้นถูกต้อง แต่ควรทำเป็นคำตอบสำรองหลังจากคำตอบที่ถูกต้องเนื่องจากจำเป็นต้องเปลี่ยนปัญหา
Aurelien Ribon

1
@ AurélienRibonไม่มีอะไรเกี่ยวกับคำสั่งปัญหาที่บอกว่าไม่สามารถเปลี่ยนชนิดของตัวแปรได้ ข้อกำหนดมีไว้เพื่อจัดเรียงไฟล์List. และค่าใช้จ่ายที่เกี่ยวข้องกับคำตอบนี้ไม่ใช่เรื่องเล็กน้อยและไม่จำเป็นอีกด้วย แท้จริงมันไม่ได้รับอะไรเลย มันเพิ่มความซับซ้อนให้กับโค้ดมันรัดกุมน้อยลงมีประสิทธิภาพน้อยกว่าไม่มีอะไรเลยนอกจากข้อเสียที่นี่
Servy


12

คำตอบอื่น ๆ ที่ถูกต้องที่จะแนะนำแต่พวกเขาดูเหมือนจะไม่ได้รับความจริงที่ว่าสถานที่จัดเก็บข้อมูลที่มีการพิมพ์เป็น SortIList<stringSortไม่ได้เป็นส่วนหนึ่งของอินเทอร์เฟซ

หากคุณรู้ว่าListaServiziจะมี a อยู่เสมอList<string>คุณสามารถเปลี่ยนประเภทที่ประกาศไว้หรือใช้นักแสดงก็ได้ หากคุณไม่แน่ใจคุณสามารถทดสอบประเภท:

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

บางทีสำนวนมากกว่านี้:

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

หากคุณรู้ว่าListaServiziบางครั้งจะมีการนำไปใช้งานที่แตกต่างIList<string>ออกไปแสดงความคิดเห็นและฉันจะเพิ่มคำแนะนำหนึ่งหรือสองข้อเพื่อจัดเรียง


5
ListaServizi.Sort();

จะทำเพื่อคุณ ตรงไปตรงมามากพอกับรายการสตริง คุณต้องฉลาดขึ้นเล็กน้อยหากจัดเรียงวัตถุ


3
ListaServiziคือIList<string>; อินเทอร์เฟซไม่มีSortวิธีการ อย่างน้อยคุณต้องมีนักแสดงที่นี่
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));
}

เอาต์พุต: Abdi 3 Alex 2 Bob 4

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.