PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VB.NET Array Frage



BlackHook
29.10.2010, 16:07
Hi Jungs.
Ich beschäftige mich seid paar Tagen mit VB.NET.
Zurzeit versuche ich einen Warezgrabber zu schreiben.
Es funktioniert soweit Alles ganz gut.
Nun bin ich auf die Idee gekommen den Grabber noch zu erweitern um eine Funktion die die Namen nach Hits sortiert.

Dazu wollte ich eigentlich Array verwenden, komme aber damit nicht gut zu recht.

Ich habe mir folgendes ausgedacht. (Weil ich es so in der Lage bin zu realisieren, hoffentlich könnt Ihr mir helfe es besser zu realisieren)
Mit RegEx fange ich den Namen und den Hits-Wert auf.
Das schiebe ich in eine ListBox
Hit # Name (# - ist nur mein Trenner damit ich sortieren und abwerfen kann)
Die Zahl formatiere ich in eine 5-Stellige Zahl damit richtig sortiert wird, nach dem Grabben sortiere ich die ListBox mit Split werfe ich die Zahlen ab.

Nun, ich kann mir denken dass das ganze viel einfacher geht. Möglicherweise mit mehrdimensionalem Array.

Mein Format der Daten ist zB.
542 NameDesProgramms

Nun sollte es dann in ein Array geladen werden und nach der Zahl sortiert werden.
Ein Beispiel der Lösung hätte mich gefreut.
Natürlich auch andere Möglichkeiten interessieren mich auch, allerdings glaube ich dass es mit dem Array am schnellsten gehen müsste.

inout
29.10.2010, 16:24
Ich kenne mich mit VB.NET nicht aus, aber VB.NET bietet doch bestimmt die Möglichkeit einer "CustomSort"-Methode, also dass du dir eine eigene Sort-Funktion schreiben kannst und diese beim Sortieren übergeben kannst.

Dort kannst du dann den Wert ganz bequem splitten und vergleichen. Das wäre mMn die sauberste Methode.

Edit: http://www.vb-helper.com/howto_net_custom_sort_array.html

Th3_Cr4xX
29.10.2010, 16:30
Also .NET bietet die auf jeden Fall mal die Sort-Methode, die auf dem Quicksort-Algorithmus (einer der schnellsten) basiert... Es gibt verschiedene Listen. Würde dir für Wert - Name einfach mal die Hashtable empfehlen. Ansonsten : Basics

BlackHook
29.10.2010, 22:04
Das ist nett dass Ihr mir Tipps liefert.
Sortieren an sich ist kein Problem für mich.
Ich habe an Array gedacht und denke immer noch dass das die richtige Richtung ist.

Das Problem mit dem Sortieren ist also kein großes Problem.
Natürlich werde ich auch noch googeln nach Quicksort-Algo, doch meine Interesse geht wirklich mehr in Richtung Array.

Das hängt mit meinem Projekt zusammen.
Ich übergebe schon ein Array an eine Funktion in anderem Thread. dieser Array sollte dann befüllt werden, sortiert natürlich auch, und dann zurückgegeben.

Auch wenn es andere Methoden geben sollte interessiert bin ich an der Array Methode am meisten.


EDIT:
Oben habe ich rot markiert.
Tips sind gut und schön. Beispiele bringen aber mehr. Keine Lösungen, die kann ich schon selbst schreiben, nur Beispiele wie man es umsetzt.

inout
29.10.2010, 22:32
Also, mein erstes Posting enthält eigentlich ein gutes Beispiel, aber hier noch mal ein ganz einfaches:

Public Class Form1

Public Class myCMPClass
Implements IComparer
Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim s1() As String = x.split(" ")
Dim s2() As String = y.split(" ")
Return Integer.Parse(s1(0)).CompareTo(Integer.Parse(s2(0) ))
End Function
End Class

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim s(3) As String
s(0) = "473 hallo"
s(1) = "123 abc"
s(2) = "54 wtf"
s(3) = "883 hoi"

Array.Sort(s, new myCMPClass)

For Each t As String In s
MessageBox.Show(t)
Next
End Sub
End Class
Das Ergebnis ist:


54 wtf
123 abc
473 hallo
883 hoi
Beim "normalen" Sortieren wäre das Ergebnis:


123 abc
473 hallo
54 wtf
883 hoi

BlackHook
30.10.2010, 09:19
@inout
Danke sehr. Das ist schon was brauchbares.
Sorry dass ich deine erste Antwort nicht gründlich genug betrachtet habe, ich bin mehr oder weniger seid 2 Tagen am feiern. (Mein Geburtstag)

Nun habe ich dein Link angeschaut, ja das ist was brauchbares.
Für dein Beispiel-Code noch mal danke. Ich muss aber erst nüchtern werden.
Danke erst mal. Ich melde mich noch.

Impi
29.11.2010, 12:08
Also .NET bietet die auf jeden Fall mal die Sort-Methode, die auf dem Quicksort-Algorithmus (einer der schnellsten) basiert... Es gibt verschiedene Listen. Würde dir für Wert - Name einfach mal die Hashtable empfehlen. Ansonsten : Basics

falsch! Die Laufzeit von Quicksort ist abhänig davon wie das Array beschaffen ist.
Sollte das Array bereits sortiert sein(worst case) ist Quicksort eher uneffizient!