Integer Array sortieren

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Integer Array sortieren

    Hallo alle zusammen, ich stehe gerade ein wenig auf dem Schlauch. Vielleicht könnt ihr mir helfen?

    Ich habe 2 Integer Array die aus jeweils 5 Elementen besteht.
    Jetzt geht es darum die Werte beginnend mit der höchstpunktzahl zu sortieren.
    In dem Fall wäre Platz1: Spieler 5 (500), Platz2: Spieler2(200) & Spieler3 (200), Platz3: Spieler4(0). Platz4: Spieler1 (-300)
    Leider komme ich dort aktuell nicht weiter.
    Der eine Array ich nennen Ihn punkte_gesamt(1-5)
    Der andere spieler_name(1-5)

    punkte_gesamt(1-5) beinhaltet folgende Werte:
    Beispiel:
    -300
    200
    200
    0
    500

    spieler_gesamt(1-5) beinhaltet folgende Werte:
    Spieler1
    Spieler2
    Spieler3
    Spieler4
    Spieler5
    Hallo @kukuk1! Herzlich willkommen im Forum!

    kukuk1 schrieb:

    Ich habe 2 Integer Array

    kukuk1 schrieb:

    spieler_gesamt(1-5) beinhaltet folgende Werte:
    Spieler1
    Spieler2
    Spieler3
    Spieler4
    Spieler5
    Das kann nicht zur Ausführung kommen. Wenn du das zweiten Array als Dim spieler_gesamt(4) As Integer definierst und die Werte "Spieler1", "Spieler2", "Spieler2",... einfügst, dann sollte VS dir sogar bei Option Strict Off einen Compilier-Fehler anzeigen ("Kann nicht implizit von Typ String in Integer konvertieren" - oder so ähnlich).

    kukuk1 schrieb:

    Der eine Array
    Der Gerät - ne, das Array (Link) *grammar-nazi flies away*

    kukuk1 schrieb:

    Vielleicht könnt ihr mir helfen?
    Klar! Wenn du uns deinen bisherigen Code mal zeigtst, können wir dir sicher helfen und zeigen, was du verbessern kannst.

    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    Hallo, vielen Dank für deine schnelle Antwort.

    VB.NET-Quellcode

    1. Dim punkte(5) As Integer
    2. Dim spieler(5) As String
    3. punkte(0) = 200
    4. punkte(1) = 500
    5. punkte(2) = 0
    6. punkte(3) = 300
    7. punkte(4) = -800
    8. spieler(0) = "Spieler1"
    9. spieler(1) = "Spieler2"
    10. spieler(2) = "Spieler3"
    11. spieler(3) = "Spieler4"
    12. spieler(4) = "Spieler5"
    13. Array.Sort(punkte, spieler)
    14. For i = 0 To 4
    15. TextBox1.Text = TextBox1.Text & vbCrLf & spieler(i) & ": " & punkte(i)
    16. Next

    CodeTags gesetzt ~VaporiZed

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Iwie passt der Code, den du grad geposte hast nicht mit der Reihenfolge aus Post#1 zusammen.

    Aber versuch mal einen anderen Weg: Erstell dir dich einfach eine Klasse Player, welche 2 Properties hat, einmal einen Namen als String und eine Punktzahl als Integer. Nun brauchst du nur noch ein Array vom Typ Player machen und für jeden Spieler eine Instanz der Klasse Player - also ein Player-Objekt mit dem Namen und der Punktzahl erstellen. Anschließend kannst du den System.Linq Namespace einbinden - in VB.NET ist der eh immer drinne, sofern du ihn nicht manuell entfernt hast. Dort gibt es eine Klasse Enumerable. Diese ermöglich es dir auf jedem Objekt, dessen Klasse in der Vererbungshierarchie die Klasse IEnumerable(Of T) hat, die Methode OrderBy aufzurufen. Diese nimmt einen Lamda-Ausdruck und sortiert die Liste (bzw eigentlich: Aufzählung) in absteigender Reihenfolge.
    Hier mal ein fixes Beispiel - in Notepad++ gemacht!!

    VB.NET-Quellcode

    1. Public Class Player
    2. Public Property Name As String
    3. Public Property Punkte As Integer
    4. End Class
    5. Public Class Foo
    6. Private spieler(4) As Player
    7. Public Sub New()
    8. spieler(0) = New Player() With {.Name = "Spieler1", .Punkte = 200}
    9. spieler(1) = New Player() With {.Name = "Spieler2", .Punkte = 500}
    10. spieler(2) = New Player() With {.Name = "Spieler3", .Punkte = 0}
    11. spieler(3) = New Player() With {.Name = "Spieler4", .Punkte = 300}
    12. spieler(4) = New Player() With {.Name = "Spieler5", .Punkte = -800}
    13. End Sub
    14. Public Sub ListeSpieler()
    15. Dim spieler_sortiert = Me.spieler.OrderBy(Function(s) s.Punkte).ToArray()
    16. For i = 0 To 4
    17. Console.WriteLine(spieler_sortiert(i).Name & ": " & spieler_sortiert(i).Punkte)
    18. Next
    19. End Sub
    20. End Class


    Lg Radinator
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell
    @kukuk1 Willkommen im Forum. :thumbup:
    Vielleicht nutzt Du ein SortedDictionary(Of String, Integer), gugst Du hier.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!