2010-10-02 15 views
9

IList के लिए कोई Sort() फ़ंक्शन नहीं है। क्या कुछ इस से मेरी मदद कर सकता है? मैं अपना खुद का IList सॉर्ट करना चाहता हूं।मैं IList <Class> कैसे क्रमबद्ध करूं?

मान लीजिए यह मेरा IList है:

public class MyObject() 
{ 
public int number { get; set; } 
public string marker { get; set; } 
} 

मैं कैसे प्रकार myobj मार्कर स्ट्रिंग का उपयोग करते हैं?

public void SortObject() 
{ 
IList<MyObject> myobj = new List<MyObject>(); 
} 
+1

क्या 'myobj' हमेशा' सूची 'है? यदि ऐसा है, तो आप इसे 'सूची' पर डाल सकते हैं और अपना 'सॉर्ट' फ़ंक्शन चला सकते हैं। – Gabe

उत्तर

16

उपयोग OrderBy

उदाहरण

public class MyObject() 
{ 
    public int number { get; set; } 
    public string marker { get; set; } 
} 

IList<MyObject> myobj = new List<MyObject>(); 
var orderedList = myobj.OrderBy(x => x.marker).ToList(); 

एक मामले के लिए असंवेदनशील आप एक IComparer

public class CaseInsensitiveComparer : IComparer<string> 
{ 
    public int Compare(string x, string y) 
    { 
     return string.Compare(x, y, StringComparison.OrdinalIgnoreCase); 
    } 
} 

IList<MyObject> myobj = new List<MyObject>(); 
var orderedList = myobj.OrderBy(x => x.marker, new CaseInsensitiveComparer()).ToList(); 
+0

धन्यवाद @ ब्रूनो यह मदद करता है। केस-सेंसिटीविटी पर विचार करने के लिए – Rye

+1

+1, लेकिन फ्रेमवर्क में पहले से ही केस-असंवेदनशील स्ट्रिंग तुलनाकर्ता हैं, किसी को बनाने की आवश्यकता नहीं है। अपने केस इन्सेंसिटिव कॉम्पैडर के बजाय StringComparer.OrdinalIgnoreCase आज़माएं। – Joe

0
var sorted = myObj.OrderBy(x => x.marker); 
0

OrderBy निश्चित रूप से काम किया जाता है का उपयोग करना चाहिए, लेकिन मैं व्यक्तिगत रूप से List.Sort का सिंटैक्स पसंद करता हूं क्योंकि आप इसे IComparer<T> लागू करने वाली कक्षा लिखने के बजाय Comparison<T> प्रतिनिधि को खिला सकते हैं। हम एक विस्तार विधि के साथ उस लक्ष्य को पूरा कर सकते हैं, और कहा कि अगर कुछ आप में रुचि रखते हैं, SortExtensions की जाँच:

http://blog.velir.com/index.php/2011/02/17/ilistt-sorting-a-better-way/

9

मैं के खिलाफ जाना एक सूची के साथ OrderBy का उपयोग करेगा, क्योंकि यह एक LINQ विस्तार विधि है , इसलिए:

  • यह सूची को एक गणना में लपेटता है, फिर इसे समझाता है और एक नई अस्थायी सूची भरता है, फिर यह नई सूची टाइप करता है।
  • यह क्रमबद्ध सूची को एक और गणना के अंदर लपेटता है।
  • फिर जब आप ToList() पर कॉल करते हैं, तो यह उस पर पुनरावृत्त करता है और वस्तुओं के साथ एक और नई सूची भरता है।

संक्षेप में: यह वास्तविक सॉर्टिंग के अतिरिक्त 2 नई सूचियां और 2 अंकुश बनाता है और भरता है। तुलना में, List.Sort() जगह पर और कुछ भी नहीं बनाते हैं, इसलिए यह अधिक कुशल है।

मेरे सिफारिश होगा:

  • आप अंतर्निहित प्रकार जानते हैं, तो, List.Sort() या Array.Sort(array)
  • का उपयोग आप अंतर्निहित प्रकार पता नहीं है एक अस्थायी सरणी सूची कॉपी और का उपयोग कर इसे सॉर्ट Array.Sort(array) और इसे वापस करें।
संबंधित मुद्दे