Frage

Ich habe Probleme beim Einwickeln meinen Kopf um das Konzept eines Arrays mit mehr als zwei Dimensionen, warum Sie man braucht, und wie würden Sie es verwenden.

Zum Beispiel, wie würden Sie gehen über die folgenden Daten in einem multidimesional Array darstellt?

Geschlecht: männlich | weiblich
Haarfarbe: Blond | brunette | schwarz und Augenfarbe: Blau | Brown | Green | Hazel

Instinct sagt mir, dass ich ein Array erstellen sollte, wie so:

string[,,] personAttributes = new string[2,3,4]

Bitte zeigen, wie Sie würden Sie dieses Array aufzufüllen, ohne eine Schleife, und dann mit einer Schleife. Jede Erweiterung auf Konzepte und Nutzung geschätzt.

War es hilfreich?

Lösung

Ich werde nicht Ihr personAttributes Beispiel berühren, weil ich nicht glaube, ein 2D-Array ist eine gute Idee, geschweige denn 3D (ich persönlich würde eine Reihe von Strukturen verwendet werden).

Allerdings multidimensionalen Arrays sind sehr nützlich, wenn Sie irgendeine Art von orthogonalem Datenraum haben (das heißt Sie mehr „Auswahl“ hat, die voneinander unabhängig sind).

Zum Beispiel, wenn Sie die Antwortzeiten von 20 Personen über 10 Tests sind speichern, wobei jeder Test 3-mal wiederholt wird, und das Ganze wird für 12 Monate einmal im Monat durchgeführt, können Sie ein Array wie folgt aussehen:

double[,,,] responseTime = new double [12,20,10,3];

Andere Tipps

Auf die Gefahr hin banal, verwenden Sie Arrays von drei oder mehr Dimensionen, wenn Sie drei oder mehr Dimensionen von Daten. Also ich denke, Sie Probleme haben mit Vorstellungsvermögen drei Dimensionen von Daten.

Wie wäre es 3-D Tic Tac Toe ? Jede diskrete Darstellung von dreidimensionalen Daten paßt in dieser Kategorie.

Wie für Attribute wie Haarfarbe und so weiter, würde ich nicht ein mehrdimensionales Array für diesen. Verwenden Sie Objekte mit Eigenschaften für das und Aufzählungen (zB Gender als Enum) als angemessen. Das wird sein viel besser lesbar als eine N-dimensionale Array.

würde ich in Ihrem Beispiel sagen, ein mehrdimensionales Array keinen Sinn macht. Eine Klasse macht viel mehr Sinn in Ihrer Situation. So etwas wie eine Aufzählung als Member-Variable gespeichert wäre eine Möglichkeit, Sie gehen könnten:

enum HAIRCOLORS { BROWN = 0, BLOND = 1 ..... };
enum SEX { FEMALE = 0, MALE = 1 };
enum EYECOLORS { GREEN, BLUE, RED .... };

class PersonAttributes 
{
    public SEX sex = SEX.Female;
    public HAIRCOLORS hairColor = HAIRCOLORS.Brown;
    public EYECOLORS eyeColor = EYECOLORS.Green;
};

etc ...

Um die Datenstrukturen zu modellieren, die mehrere Dimensionen haben. Ein Schachbrett ist ein gutes Beispiel, 1 Dimension ist für Rang, die andere für die Datei ist.

Da die Kategorien von Daten in Ihrem Beispiel (Geschlecht, Augenfarbe, Haarfarbe) keine Beziehung mit anderen Kategorien haben, so scheint es, dass dies am besten als 3 verschiedene Anordnungen dargestellt werden würde, die jeweils mit 1 Dimension.

Wenn Sie über eine mehrdimensionale Array Schleife wollen, können Sie einfach eine Schleife innerhalb einer Schleife verwenden:

for (int i = 0; i < array.length; i++) {
   for (int j = 0; j < array[0].length; j++) {
      string data = array[i][j];
      // do something with the data
   }
}

Das Denken eines Arrays als Adresse kann hilfreich sein.

123 Main St Springfield MA

Mit diesem Beispiel meine erste Array würde eine Reihe von Staaten sein. Jeder Staat würde eine Reihe von Städten halten, als Städte Straßen halten und schließlich Straßen halten einzelne Adressen.

Mit dieser Anordnung könnten wir leicht eine Mailingliste mit jeder Adresse erstellen. Gerade Schleife durch jedes Array und Sie wäre in der Lage jede Adresse auszudrucken oder was auch immer Sie tun müssen.

bei Ihrem Beispiel Sehen, ich sehe nicht, mehrdimensionale Arrays als eine gute Passform. Es sei denn, die Hauptsache, Sie mit Ihrem Arrays tun mögen, ist Teilmengen Ihrer Daten, wie die Leute zu finden, die weiblichen / blond / blaue Augen sind. Ich würde folgt dem Vorschlag, eine Klasse zu verwenden. Wenn Sie an einer Person Objekt in einem Array suchen Sie gehen, um die Indexwerte zu müssen wissen, auf diese Person zeigen diese Merkmale zu verstehen.

Ein weiteres Beispiel, das nützlich sein könnte, ist die Internationalisierung von Nachrichten in einer Anwendung. Die Arrays können Sprache, Zustand (Fehler, Warnung, Information), Nachrichten-ID (ein Array Nachricht Strings) sein.

Wie für die Arrays füllen, nur wenige für Schleifen verwendet werden könnten, wenn die Daten sortiert wurde. Andernfalls können die Daten Ihrer Eingabe analysieren, um die entsprechenden Indizes zu identifizieren.

Wie die andere geschrieben haben, hat Ihr Beispiel nicht gut geeignet, um einen 3D-Array. Ihr Beispiel scheint besser geeignet, um eine 2D-Datenstruktur. Ein Index sind Personen, der andere Index ist das Merkmal: Geschlecht, Haarfarbe, Augenfarbe. Oder Sie könnten eine andere Datenstruktur verwenden ...

Ein einfaches Beispiel für eine 3D-Anordnung: unter Berücksichtigung einen (unkomprimiert) digitalen Schwarzweiß-Film zu speichern. Jeder Rahmen ist ein 2D Bild X vs Y mit Intensitätswerten: Bild (i, j). Jetzt mehr Rahmen zu haben, um einen Film haben Sie den Film als Bilder speichern können (i, j, k), wobei k Veränderungen im Laufe der Zeit. Wenn der Film in Farbe ist, konnte man eine vierte Dimension hinzufügen, die drei Primärfarben zu speichern. Cimages (i, j, q, k), q = 1,2,3, und einen 4D Array

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top