Integer-Variablen sortieren

Hafke

Mitglied
Also, ich habe 30 Variablengruppen zu je 4 Variablen:

a1,b1,c1,d1
a2,b2,c2,d2
a3,b3,c3,d3
usw.

jetzt möchte ich nach der a1,a2,a3,... Variablen sortieren.

z.B.: a1 = 3 ; a2 = 7 ; a3 = 5

dann möchte ich in die vierte Variable schreiben, welche position die dazugehörige gruppe hat. Also:

d2 = 1 ; d3 = 2 ; d1 = 3

Wie mache is das mit möglichst wenig Code?

Ich habe schon einiges über Arrays gelesen nur weiß ich nicht wie ich auf dei einzelnen Zahlen zugreifen kann...
 
Also das mit deiner Sortierung habe ich glaube ich nicht ganz verstanden. Vielleicht machst du mal ein konkretes Beispiel.

Für deinen Fall sähe ein Array so aus:

Code:
 Dim Zahl(29, 3) as Integer

Und einzeln (nur als Beispiel) könntest du ihnen so werte zuweisen:

Code:
 'würde in deinem Fall a1 entsprechen
 Zahl(0, 0) = 1
 'würde in deinem Fall b1 entsprechen
 Zahl(0, 1) = 2

Beachten musst du dabei das in einem Array die 0 auch als Arrayelement gilt. Willst du also 5 Arrayelemente deklarieren musst du das Array so deklarieren:

Code:
 Dim XY(4) as Integer

Ein Array kannst du natürlich mit jedem Datentyp erstellen.

Um deine Variablenbeispiele in Arrays nochmal aufzufassen:

Code:
 Dim a(29) as Integer
 Dim b(29) as Integer
 Dim c(29) as Integer
 Dim d(29) as Integer

Arrayelemente lassen sich natürlich auch mit Variablenwerten ansprechen:
z.B. ...
Code:
 Dim i as Integer
 Dim Array(15) as String
 
 i = "Hallo"
 
 If Array(i) = "Hallo" then ...

Für Schleifen z.B. ...

Code:
 Dim i as Integer
 Dim Array(9) as String
 
 For i = 0 to 9
 	  Array(i) = i + 1
 Next i

Hoffe ich konnte bissl helfen.

Gruß Dignsag

P.S.: Mit Sortierungen innerhalb von Arrays kann ich dir auch helfen. Aber erst muss ich mal verstehen was du willst!
 
Großes Dankeschön erstmal, das hilft mir richtig weiter.

Nur noch ne Frage:

Code:
 Dim i as Integer
 Dim Array(15) as String
 
 i = "Hallo"
 
 If Array(i) = "Hallo" then ...

1. bei "Dim i As Integer" kann man doch nur Zahlen speichern oder? Weil da i = "Hallo" steht
2. bei dem "If Array(i)..." welche Position hat "i", ich meine ist das "Hallo" auf irgendeinem der 16 Speicherplätze oder an einem bestimmten, wenn ja an welchem?


zu meiner Sortierung:

Ich möchte ein Spiel programmieren, bei dem man eine Bestenliste aufrufen kann, max Speicherplätze = 30, dazu muss ich ja schauen wer den "Highscore" hat (Variable 1), den Namen des Spielers (Variable 2) und die Position (Variable 3)

Also soll er nach Variable 1 sortieren, beginnen mit dem höchsten Punktestand und dann die Namen dazuschreiben.

Hoffentlich hilft dir das mein Prob zu verstehen...
 
Er meinte wohl eher sowas:
Code:
Array(1) = "Hallo"

Wenn du alle Ergebnisse in einem Array speicherst, ist ein Sortieren nicht mehr sonderlich schwer.
Da kannst du fertige Sortieralgorithmen wie Quicksort, Bubblesort o.ä. verwenden.
Einen solchen Algorithmus findest du z.B. hier: http://vb-tec.de/qsort.htm

* Ups, das mit den Namen habe ich wohl gerade überlesen. Ich denk aber mal drüber nach :)
 
Zuletzt bearbeitet:
Sorry du hast natürlich vollkommen recht mit dem Integer, dann kannman kein "Hallo" speichern. Werde mir dein Problem morgen noch mal näher anschaun, und dann besser antworten, bin jetzt zu müde!

Der rest des beispiels stimmte übrigens, es sollte nur aufzeigen das ein Arrayelement auch mit Variablenwerten angesprochen werden kann.

Übrigens die Zahl in der Klammer entspricht dem Arrayelement, in dem dein Variablenwert den du zuweist im endeffekt gespeichert wird. Du kannst diesen wert dann also auch wieder über die Zahl abrufen!

Code:
 Array(0) = 1
 Array(1) = 2
 Array(2) = 3
 'usw.
 
 'dann kannst du z.B. sagen
 Debug.Print Array(1)
 'damit rufst du das 2. Element des Arrays "Array" auf!
 
Code:
  Sub sortieren()
  Dim Punkte(29) as Long
  Dim Name(29) as String
  Dim Zaehler as Integer
  Dim Zaehler2 as Integer
  
  For Zaehler = 0 to 29
  	 For Zaehler2 = 0 to 29
  		  If Punkte(Zaehler) > Punkte(Zaehler2) and Zaehler <> Zaehler2 then
  			   tauschen(Punkte(Zaehler), Punkte(Zaehler2))
  			   tauschen(Name(Zaehler), Name(Zaehler2))
  		  End If
  	 Next
  Next
  
  End Sub
  
  
  Sub tauschen(ByRef Wert1 as Variant, ByRef Wert2 as Variant)
  Dim Merken as Variant
  
  Merken = Wert1
  Wert1 = Wert2
  Wert2 = Merken
  End Sub

So die erklärung dazu!
Die beiden Schleifen sortieren deine Arrayinhalte nach den Punkten absteigend!
Im endeffekt steht das dann so in dem Array z.B.:

Punkte(0) = 9999
Punkte(1) = 9842
Punkte(2) = 8123
...
usw.

Und dazu werden den gleichen Elementen in dem anderen Array "Name" die Namen zugeordnet

Punkte(0) = 9999; Name(0) = Hans
Punkte(1) = 9842; Name(1) = Michael
Punkte(2) = 8123; Name(2) = Torsten
...
usw.

Das heißt die gleichen Zahlen in den zwei Arrays gehören zueinander!
Die Sub tauschen tauscht einfach die Inhalte der 2 Werte die eingegeben werden.
Vorraussetzung ist, das die Arrayinhalte schon enhalten sind. Und das bei der Befüllung daran gedacht wurde, das jeder Punkte Zahl der Name im gleichen Element des anderen Arrays zugeordnet sein muss.
Die Positon ergibt sich ja sowieso aus den Punkten. Kannst du ja auch im nachhinein noch anfügen!

Hoffe du hast es verstanden und kannst was damit anfangen

Für Fragen, meld dich einfach!

Gruß Dignsag
 
Zuletzt bearbeitet:
Die Einträge
Code:
tauschen(Punkte(Zaehler), Punkte(Zaehler2))       
tauschen(Name(Zaehler), Name(Zaehler2))

sind bei mir Rot und er erwartet ein "="


edit: bei Zugriff auf Array schreibe ich

debug.print array(i) = was-ich-speichern-möchte

und wie is es andersrum

was-ich-gespeichert-habe = ?
 
Zuletzt bearbeitet:
Entschuldigung Fehler meinerseits...

Du musst die tauschen-Sub ohne Klammern schreiben:

Code:
 tauschen Punkte(Zaehler), Punkte(Zaehler2)       
 tauschen Name(Zaehler), Name(Zaehler2)

Deine zweite Frage versteh ich nicht, mit andersrum! Was willst du andersrum machen?

Gruß Dignsag
 
Also
Code:
Dim Temp As Variant

Temp = Text1.Text 'Hier speichere ich den Text aus der TextBox in die Variable Temp
Text1.Text = Temp 'Hier speichere ich die Variable Temp in die TextBox

Wie funktioniert das mit nem Array?

Code:
Dim Temp(i) As Variant

debug.print Temp(0) = Text1.Text 'In Array speichern
Text1.Text = ? 'Aus Array laden, wie geht das
 
Zurück