Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

1

05.09.2012, 09:32

C# Mehrdimensionales Array sortieren

Hallo,


gibt es in C# eine Möglichkeit ein Mehrdimensionales (Integer-)Array zu sortieren?

Ich habe ein 2-Dimensionales Array, das beliebig viele Elemente enthalten kann und für jedes Element 3 Informationen speichern kann.

iTest[0,0] (Speichert die Punkteanzahl vom ersten Spieler)
iTest[0,1] (Speichert die Lebensanzahl vom ersten Spieler)
iTest[0,2] (Speichert das Guthaben vom ersten Spieler)

iTest[1,0] (Speichert die Punkteanzahl vom zweiten Spieler)

iTest[1,1] (Speichert die Lebensanzahl vom zweiten Spieler)
iTest[1,2] (Speichert das Guthaben vom zweiten Spieler)
...




Gibt es eine Möglichkeit das Array beispielsweise nach der Punkteanzahl sortieren zu lassen, oder müsste ich mir dazu selbst eine Funktion einfallen lassen?

Danke schon mal für die Hilfe.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

05.09.2012, 09:38

du solltest es in ein normales Array umwandeln und eine "Spieler"-Klasse für die Speicherung der Informationen verwenden
dann brauchst du für das Sortierun des Arrays auch nur die Möglichkeit der Sortierung eines Arrays
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

05.09.2012, 09:38

Die drei Werte in eine struct schieben, dann anstatt des mehrdimensionalen arrays ein eindimensionales aus instanzen der struct und in der struct dann einfach IComparable implementieren.

MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

4

05.09.2012, 09:43

Die drei Werte in eine struct schieben, dann anstatt des mehrdimensionalen arrays ein eindimensionales aus instanzen der struct und in der struct dann einfach IComparable implementieren.
Gibts dafür auch eine Erklärung, die man als Schüler verstehen kann? :S


du solltest es in ein normales Array umwandeln und eine "Spieler"-Klasse für die Speicherung der Informationen verwenden
dann brauchst du für das Sortierun des Arrays auch nur die Möglichkeit der Sortierung eines Arrays
Also ich sollte ein 1-Dimensionales String-Array daraus machen. Wie weiß ich dann aber (wenn dieses Array dann sortiert/Umgestellt wurde), welche andere Information zu dem jeweiligen Element gehört?
Mit Klassen habe ich noch nie gearbeitet. Kannst du da vielleicht mal ein Beispiel schreiben, oder wie sollte das dann funktionieren?

Danke auf jedenfall schon mal für die schnellen Antworten!

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

05.09.2012, 09:46

Mit Klassen habe ich noch nie gearbeitet.
Uaaa! Buch! Dringend! Lesen! Lernen!
Ohne Structs und Klassen zu arbeiten ist overkill, da kommen doch tausenden wilde Arrays zusammen. Bloß nicht. Und wenn schon, dann die Indices wenigstens mit Konstanten oder Enums versehen und nicht mit Zahlen.

C#-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
class Player {
public int Points { get; private set; }
public int Life { get; private set; }
public int Money { get; private set; }
...
}

List<Player> players = new List<Player>();
players.Add ( ... );
players.Add ( ... );
players.Add ( ... );

players.Sort(delegate(Player p1, Player p2) { return p1.Points.CompareTo(p2.Points); });
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (05.09.2012, 09:53)


MitgliedXYZ

Alter Hase

  • »MitgliedXYZ« ist der Autor dieses Themas

Beiträge: 1 369

Wohnort: Bayern

  • Private Nachricht senden

6

05.09.2012, 09:48

Ja, würde irgendwie echt nicht schaden, werde mal dem nächst mir eins bestellen...
Bisher kam ich allerdings ohne aus...
Wobei MSDN ja auch noch da ist.

Und wie hilft mir das (http://msdn.microsoft.com/de-de/library/…2(v=vs.80).aspx) jetzt weiter?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

05.09.2012, 09:52

Die MSDN ist kein Buch, sondern ein Nachschlagewerk der API und Syntax.
Mein Vorschlag zur Lösung siehe Edit in meinem letzten Post.

Die Behauptung ohne Buch ausgekommen zu sein, lässt sich an Deinem Array-Problem deutlich widerlegen ;)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

8

05.09.2012, 10:12

wie wäre es mit Visual C# 2010 von Galileocomputing?

bezüglich Klasse oder Struct:
was wäre in dem Fall besser geeignet?
ich habe bisher zu selten mit Strukturen gearbeitet, weshalb ich das nicht zweifelsfrei sagen kann (ich würde zu Klassen tendieren)
siehe dazu auch die Unterschiede zwischen Klassen und Strukturen
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

05.09.2012, 10:18

Structs würde ich nur für reine Datencontainer empfehlen. "Player" klingt für mich aber nach einem logisch arbeitenden abgeschlossenen System. Daher: Klasse.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

10

05.09.2012, 11:58

@Saculdur: In der Regel wirst du mit structs auf Containern Probleme haben. Mal ein einfaches Beispiel (PlayerStruct ist eine Struktur)

C#-Quelltext

1
2
3
4
5
6
7
8
List<PlayerStruct> players = new List<PlayerStruct>();

/* wird gefüllt....*/

foreach(PlayerStruct player in players)
{
    player.Health = 100;
}



Das ganze würde nicht, wie erwartet, für jeden Spieler in der Liste die Gesundheit auf hundert setzen. Struct ist ein Valuetype und es wird dadurch beim durchiterieren eine Kopie erzeugt! Daher solltest du, wie BlueCobolt schon erwähnte, sie als reine Datenstruktur verwenden.

Werbeanzeige