Avatar billede netro Nybegynder
28. august 2007 - 12:57 Der er 8 kommentarer og
1 løsning

Sortering af generisk liste

Er det muligt at sortere efter en sekundær nøgle?

ObjList.Sort(AddressOf PrimaryComparison)
ObjList.Sort(AddressOf SecondaryComparison)

Private Shared Function PrimaryComparison(ByVal Item1 As MyObj, ByVal Item2 As MyObj) As Integer
    Return Item2.MyProp.CompareTo(Item1.MyProp)
End Function

Altså så det giver samme resultat som at sige "order by item1, item2" i sql.
Avatar billede nielle Nybegynder
28. august 2007 - 14:07 #1
Du bygger den sekundære sortering ind i PrimaryComparison.
Avatar billede nielle Nybegynder
28. august 2007 - 14:10 #2
Private Shared Function PrimaryComparison(ByVal Item1 As MyObj, ByVal Item2 As MyObj) As Integer
    Dim sort As Int = Item2.MyProp.CompareTo(Item1.MyProp)

    If (Int = 0)
        sort = SekundærSortering(Item1, Item2)

    Return sort
End Function
Avatar billede netro Nybegynder
28. august 2007 - 14:59 #3
Ja, great! Ved du i øvrigt hvordan man pænest kan gøre brug af variabler inde i funktionen? Også mht. søgninger.

Dim test As Integer = 23
Private Shared Function PrimaryComparison(ByVal Item1 As MyObj, ByVal Item2 As MyObj) As Integer
    // brug "test" til noget
    Return Item2.MyProp.CompareTo(Item1.MyProp)
End Function

I C# kan man jo skrive delegates anonymt.
Avatar billede nielle Nybegynder
28. august 2007 - 17:30 #4
Jeg er ikke sikker på at jeg forstår spørgsmålet helt - hvad har variable med anonume delegates at gøre (de eksistere desværre ikke i VB.Net 2.0)?
Avatar billede netro Nybegynder
30. august 2007 - 01:46 #5
Det jeg mener er, at man i C# kan skrive sine delegates inline i sort- eller find-metoden på en liste. I vb.net synes jeg, det er lidt bøvlet, at man skal have metoderne lagt uden for det scope man nu er i og så bruge addressof.
Avatar billede nielle Nybegynder
30. august 2007 - 07:00 #6
Well, sådan er vilkårene i VB.Net. :^)

Men det har nu ikke den store indflydelse på, hvordan man bruger variable i sin sortering-delegate. Havde det været i C#, i en anonym delegate, kunne du selvføgelig have nøjes med at definere den som en lokal variabel i den metode hvorfra den anynyme delegate oprettes og defineres i - i VB.Net er du nødt til at definere den på klasse-niveau. (Den skal nu nok være defineret som Shared for at du kan bruge den fra en Shared-metode.)

Imidlertid ved jeg ikke rigtigt hvad du vil bruge din test-variable til? Du har ikke selv nogen kontrol over i hvilken rækkefølge dine PrimaryCompare, og hvor mange gange, den bliver kaldt mens at de interne mekanismer i listen sørger for at sortere den. Dermed er det temmeligt usikkert, hvad der ligger i test-variablen undervejs eller til sidst.
Avatar billede nielle Nybegynder
11. september 2007 - 12:53 #7
Hvad med noget respons?
Avatar billede netro Nybegynder
11. september 2007 - 21:20 #8
Ja, det må være på sin plads :-)

Tak for input. Læg gerne et svar.
Avatar billede nielle Nybegynder
11. september 2007 - 21:23 #9
Svar :^)
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