2011-06-25 8 views
23

द्वारा एक VB.net सूची को सॉर्ट करना मेरे पास एक सूची है (यानी Dim nList as new List(of className))। प्रत्येक वर्ग में zIndex नामक एक संपत्ति है (यानी className.zIndex)। सूची के सभी तत्वों में zIndex चर द्वारा सूची के तत्वों को सॉर्ट करना संभव है?कक्षा मूल्य

उत्तर

41

मान लिया जाये कि आप अपने निपटान में LINQ है:

Sub Main() 
    Dim list = New List(Of Person)() 
    'Pretend the list has stuff in it 
    Dim sorted = list.OrderBy(Function(x) x.zIndex) 
End Sub 

Public Class Person 
    Public Property zIndex As Integer 
End Class 

या अगर LINQ अपने बात नहीं है:

Dim list = New List(Of Person)() 
list.Sort(Function(x, y) x.zIndex.CompareTo(y.zIndex)) 
'Will sort list in place 

LINQ और अधिक लचीलापन प्रदान करता है; जैसे कि आप एक से अधिक चीज़ों को ऑर्डर करना चाहते हैं, तो ThenBy का उपयोग करने में सक्षम होने के नाते। यह थोड़ा क्लीनर वाक्यविन्यास भी बनाता है।

+0

मैं LINQ उदाहरण का उपयोग करने में असमर्थ था, मैं इसे कैसे सक्षम करूं? हालांकि मुझे दूसरा काम करने के लिए मिला, धन्यवाद :) – FreeSnow

+0

@DalexL यह आपके द्वारा लक्षित फ्रेमवर्क संस्करण पर निर्भर करता है। आपको 3.5 या उससे अधिक की आवश्यकता है। वीबी.नेट कंपाइलर को आपके लिए सिस्टम.लिंक नेमस्पेस आयात करना चाहिए। (परियोजना के गुणों के संदर्भ टैब को देखें)। – vcsjones

+0

ठीक है, मैं तिथियों की तुलना कर रहा हूं। जब मैं अपनी लाइन 'ए। सॉर्ट (फ़ंक्शन (एक्स, वाई) x.DelegationDate.CompareTo (y.DelegationDate) का उपयोग करता हूं)', यह बिल्कुल सॉर्ट नहीं करता है। यह इसे मूल क्रम में छोड़ देता है। –

8

आप एक कस्टम तुलना का उपयोग सूची सॉर्ट करने के लिए कर सकते हैं:

nList.Sort(Function(x, y) x.zIndex.CompareTo(y.zIndex)) 
+0

मैं LINQ को कैसे सक्षम करूं? – FreeSnow

+0

@DalexL: आप 'System.Linq' नामस्थान आयात करते हैं। – Guffa

+0

@DalexL: ध्यान दें कि आपको सुझाए गए समाधान के लिए लिंक की आवश्यकता नहीं है। – Guffa

6

यदि नहीं LINQ, तो आप अपने वर्ग के लिए IComparable (className के) को लागू कर सकते हैं:

Public Class ClassName 
    Implements IComparable(Of ClassName) 

    'Your Class Stuff... 

    Public Function CompareTo(ByVal other As ClassName) As Integer Implements System.IComparable(Of ClassName).CompareTo 
    If _ZIndex = other.ZIndex Then 
     Return 0 
    Else 
     If _ZIndex < other.ZIndex Then 
     Return -1 
     Else 
     Return 1 
     End If 
    End If 
    End Function 
End Sub 

और फिर से आपका कोड:

nList.Sort() 
+0

आप उस संपूर्ण 'तुलना करने के लिए' विधि को 'वापस _ZIndex.CompareTo (अन्य.ZIndex) पर वापस कर सकते हैं। – vcsjones