Avatar billede jens_bach Nybegynder
27. januar 2010 - 04:40 Der er 6 kommentarer og
1 løsning

rækkefølge på object'er i en Collection

Hej ....

jeg har en Collection hvor jeg har lagt min class ("Ting") ind i

Class Ting
    Public tid1 As Date
    Public antal As Integer
    Public ID As Integer
End Class

der ligger så 50 ting i min Collection, men hvordan laver jeg rækkefølge om så de bliver listed efter fx ID, og derefter antal

/tak

mvh
Jens
Avatar billede arne_v Ekspert
27. januar 2010 - 04:50 #1
List har en Sort metode du kan kalde med noget kode som fortæller hvordan der skal sorteres.
Avatar billede arne_v Ekspert
27. januar 2010 - 04:51 #2
Der er nogle eksempler på:
  http://stackoverflow.com/questions/438715/how-sort-a-system-collections-generic-list-in-vb-net

Ellers kan jeg hurtigt selv bixe et eksempel.
Avatar billede arne_v Ekspert
27. januar 2010 - 04:51 #3
Jeg fandt lige noget på lageret:

Imports System
Imports System.Collections.Generic

Namespace E
    Public Class MyData
        Private _v As Integer
        Private _s As String
        Public Sub New()
            Me.New(0, "")
        End Sub
        Public Sub New(ByVal v As Integer, ByVal s As String)
            _v = v
            _s = s
        End Sub
        Public Property V() As Integer
            Get
                Return _v
            End Get
            Set
                _v = value
            End Set
        End Property
        Public Property S() As String
            Get
                Return _s
            End Get
            Set
                _s = value
            End Set
        End Property
        Public Overloads Overrides Function ToString() As String
            Return ("(" & _v & "," & _s & ")")
        End Function
    End Class
    Public Class MainClass
        Private Shared Function MyDataComparerV(ByVal o1 As MyData, ByVal o2 As MyData) As Integer
            Return (o1.V - o2.V)
        End Function
        Private Shared Function MyDataComparerS(ByVal o1 As MyData, ByVal o2 As MyData) As Integer
            Return o1.S.CompareTo(o2.S)
        End Function
        Public Shared Sub Main(ByVal args As String())
            Dim mdc As List(Of MyData) = New List(Of MyData)()
            mdc.Add(New MyData(2, "A"))
            mdc.Add(New MyData(1, "CCC"))
            mdc.Add(New MyData(3, "BB"))
            For i As Integer = 0 To mdc.Count-1
                Console.WriteLine(mdc(i))
            Next
            mdc.Sort(AddressOf MyDataComparerV)
            For i As Integer = 0 To mdc.Count-1
                Console.WriteLine(mdc(i))
            Next
            mdc.Sort(AddressOf MyDataComparerS)
            For i As Integer = 0 To mdc.Count-1
                Console.WriteLine(mdc(i))
            Next
        End Sub
    End Class
End Namespace
Avatar billede jens_bach Nybegynder
27. januar 2010 - 19:35 #4
Mange tak ;)
du er bare god til det der



lig lige et svar
Avatar billede arne_v Ekspert
27. januar 2010 - 19:55 #5
svar
Avatar billede jens_bach Nybegynder
28. januar 2010 - 00:55 #6
så var det jeg ikke kunne få det til og virke ;)

---
Public Sub Main(ByVal args As String())
        Dim mdc As List(Of MyData) = New List(Of MyData)()
        mdc.Add(New MyData(1, "C"))
        mdc.Add(New MyData(1, "A"))
        mdc.Add(New MyData(1, "D"))
        mdc.Add(New MyData(2, "B"))

        Console.WriteLine("unsorted")
        For i As Integer = 0 To mdc.Count - 1
            Console.WriteLine(mdc(i))
        Next

        Console.WriteLine("MyDataComparerV")
        mdc.Sort(AddressOf MyDataComparerV)
        For i As Integer = 0 To mdc.Count - 1
            Console.WriteLine(mdc(i))
        Next
        Console.WriteLine("MyDataComparerS")
        mdc.Sort(AddressOf MyDataComparerS)
        For i As Integer = 0 To mdc.Count - 1
            Console.WriteLine(mdc(i))
        Next
        Console.ReadLine()
    End Sub


---

giver dette

unsorted
(1,C)
(1,A)
(1,D)
(2,B)
MyDataComparerV
(1,D)
(1,A)
(1,C)
(2,B)
MyDataComparerS
(1,A)
(2,B)
(1,C)
(1,D)



---

men jeg ville gerne have

(1,A)
(1,C)
(1,D)
(2,B)


:?
Avatar billede arne_v Ekspert
28. januar 2010 - 01:02 #7
Prøv med:

        Private Shared Function MyDataComparerVS(ByVal o1 As MyData, ByVal o2 As MyData) As Integer
            Dim res As Integer = o1.V - o2.V
            If res = 0 Then
              Return o1.S.CompareTo(o2.S)
            Else
              Return res
            End If
        End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester