Avatar billede laufp Nybegynder
04. november 2008 - 12:37 Der er 5 kommentarer og
2 løsninger

sort() på en list(ofT) sorterer ikke alfabetisk

Hej har følgende kode.. Problemet er at sort funktionen godt nok ændrer rækkefølgen i listen, men det er ikke alfabetisk...

Før DistinctHandlinger.Sort() indeholder min liste følgende strings i denne rækkefølge:
""
"BLE"
"AAA"
"Tysk"

Efter DistinctHandlinger.Sort() indeholder min liste følgende strings i denne rækkefølge:
""
"BLE"
"Tysk"
"AAA"

Nogen ideer ??
(Har også prøvet med en Order By i querien, men den giver samme mærkelige sortering... Skal man angive en sorteringsmetode i starten af programmet eller ?? Er ny i vb)

Private Sub Update_Handling()

        Dim QryHandling = _
                    dsData.Tables"TableHandlinger").AsEnumerable
        Dim DistinctHandlinger As New List(Of String)

        Dim Distincthandling = From h In QryHandling _
                              Select h

        DistinctHandlinger.Clear()
        DistinctHandlinger.Add("")

        For Each h In Distincthandling
            DistinctHandlinger.Add(h("Handling"))
        Next

        DistinctHandlinger.Sort()
        Int_handlingComboBox.DataSource = DistinctHandlinger


    End Sub
Avatar billede arne_v Ekspert
04. november 2008 - 13:20 #1
Den sorterer dansk d.v.s. AA=Å !
Avatar billede pidgeot Nybegynder
04. november 2008 - 13:20 #2
Dit problem er at der som udgangspunkt bliver sorteret efter danske principper - og som bekendt kan vi på dansk bruge dobbelt-a i stedet for å, hvorfor aa sorteres som å.

Sort-metoden kan tage en IComparer(T) med som parameter (http://msdn.microsoft.com/en-us/library/234b841s.aspx), så du kan eks. strikke en sådan en sammen der bruger en CultureInfo til grundlag for sammenligningen (CultureInfo.CompareInfo.Compare()) - den CultureInfo kan du så selv vælge om er en der skal sendes med, eller om det er en fast en i din klasse - alt afhængigt af dine behov.
Avatar billede arne_v Ekspert
04. november 2008 - 13:21 #3
Angiv at den skal lade være med det.

Eksempel:

Imports System.Collections.Generic

Module Program
    Function MyComparer(a As String, b As String) As Integer
        Return String.Compare(a, b, StringComparison.InvariantCulture)
    End Function
    Sub Main()
        Dim lst As List(Of String) = New List(Of String)
        lst.Add("BLE")
        lst.Add("Tysk")
        lst.Add("AAA")
        lst.Sort
        For Each s As String In lst
            Console.WriteLine(s)
        Next
        lst.Sort(AddressOf MyComparer)
        For Each s As String In lst
            Console.WriteLine(s)
        Next
        Console.ReadKey
    End Sub
End Module
Avatar billede laufp Nybegynder
04. november 2008 - 14:18 #4
Tak Arne og pidgeot

Så skulle jeg alligevel være gået i seng før kl. 2 i nat, når man kan få svaret så hurtigt her.

Vil gerne dele points imellem jer, men det kan jeg vist ikke ? Arne sender du svar
Avatar billede arne_v Ekspert
04. november 2008 - 14:51 #5
Det kan du sagtens.

Bed pidgeot også ligge et svar, marker *begge* navne ude i combo boxen, klik accepter - så
fordeler systemet points ligeligt.
Avatar billede laufp Nybegynder
04. november 2008 - 14:54 #6
Okay pidgeon - lægger du også et svar pft
Avatar billede pidgeot Nybegynder
04. november 2008 - 15:39 #7
Værsgo :)
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