2010-06-25 14 views
11

मैं एक सूची उद्देश्य यह है कि 3 आइटम शामिल है: आंशिक, एच करने के लिए पूर्ण है, और पूर्ण ओList.Sort (कस्टम छँटाई ...)

मैं एक एएसपी OptionButtonList के लिए इस सूची बाध्यकारी कर रहा हूँ करने के लिए, और यह इसे वर्णानुक्रम में क्रमबद्ध कर रहा है।

पूर्ण करने के लिए एच, आंशिक, ओ

करने के लिए पूर्ण मैं ऐसा कर सकते हैं कैसे: हालांकि, मैं निम्नलिखित की तरह सूची क्रमबद्ध करना चाहते हैं?

+2

क्या ", पूर्ण करने के लिए एच, आंशिक हे करने के लिए पूर्ण" क्या है?कृपया कुछ कोड जोड़ें जो आपने अभी तक किया है। –

+0

अगर आपको यह सबसे उपयोगी –

उत्तर

20

लिंक इसके लिए बहुत अच्छा है। आप फ्लाई पर परिभाषित करने के लिए ऑर्डर अनुक्रम भी बना सकते हैं क्योंकि इस प्रकार के निष्पादन को ToList तक निष्पादित नहीं किया जाता है।

var sortedList = yourList.OrderBy(i => i.FullToH). 
    ThenBy(i => i.Partial). 
    ThenBy(i => i.FullToO).ToList(); 
0

अपने कस्टम प्रकार के लिए तुलनाकर्ता बनाएं (जो आईसीओएमपेयर इंटरफ़ेस लागू करता है)। इसके बाद आप उपयोग कर सकते हैं कि सूची को सॉर्ट करने:

List<CustomType> list = new List<CustomType>(); 

// Fill list 
list.Sort(new CustomComparer()); 

या आप ढांचे के एक नए संस्करण का उपयोग कर रहे हैं और छँटाई तर्क का फिर से उपयोग करने की जरूरत नहीं है, तो आप IEnumerable<T>.OrderBy() विधि का उपयोग कर सकते हैं।

6

आइटम आप सूचीबद्ध (उदाहरण के लिए FullToHo) बस तार कर रहे हैं? यदि ऐसा है तो आपको उस विधि के साथ तुलना करने और क्रमबद्ध करने के लिए एक विधि लिखना है।

public int CompareEntries(string left, string right) { 
    const string fullToH = "Full To H"; 
    const string partial = "Partial"; 
    const string fullToO = "Full To O"; 
    if (left == right) { 
    return 0; 
    } else if (left == fullToH) { 
    return -1; 
    } else if (left == fullToO) { 
    return 1; 
    } else if (right == fullToH) { 
    return 1; 
    } else { 
    return -1; 
    } 
} 

list.Sort(CompareEntries); 
3

यह मानते हुए कि अपनी सूची

List<object> myList = new List<object>(); 

नहीं है, लेकिन इसके बजाय, जैसे

List<MyObjectClass> myList = new List<MyObjectClass>(); 

(प्रत्येक तत्व का एक ही वस्तु प्रकार का है)

आप कर सकता है कुछ यह:

myList.Sort((firstObj, secondObj) => 
    { 
     return firstObj.SomeProperty.CompareTo(secondObj.SomeProperty); 
    } 
); 
9

हर किसी की मदद के लिए धन्यवाद!

मैं इसे इस तरह से किया था:

List<string> sortedList = new List<string>(); 
sortedList = list.OrderBy(i => i.CodeValue == "FullToH").ThenBy(i => i.CodeValue == "Partial").ThenBy(i => i.CodeValue == "FullToO").ToList(); 

फिर sortedList से आबद्ध!

+2

मिला है तो पहले जवाब में आवंटन अनावश्यक है। यह बेहतर है: सूची sortedList = list.OrderBy ..... – oferei

+0

मैंने कोशिश की, यह काम नहीं करता है! –

7

ठीक है, मैं जानता हूँ कि यह कुछ साल पुराना है, लेकिन मैं कोई वैकल्पिक समाधान मुझे लगता है कि इसके बाद के संस्करण समाधान की तुलना में अधिक सुंदर है कि भविष्य पाठकों विचार करना चाह सकते है:

अपनी कक्षा में:

static readonly List<String> codeValueSortOrder = new List<String> { 
    "Full To H", 
    "Partial", 
    "Full To O" 
}; 

और अपने विधि में:

sortedList = list.OrderBy(i=> codeValueSortOrder.IndexOf(i.CodeValue)); 
+2

नोट: ओ (एन^2 लॉग एन) के बजाय 'डिक्शनरी [वैल्यू]' के साथ ओ (1) खोज और समग्र ओ (एन लॉग एन) रखने के लिए 'कोडValueSortOrder' सूची' के बजाय वास्तविक कोड उपयोग 'शब्दकोश' के लिए ' List.IndexOf' –

संबंधित मुद्दे