Website-Suche

Typescript - Initialisierung eines mehrdimensionalen Arrays


Ich spiele mit TypeScript und frage mich, wie man ein mehrdimensionales Array richtig instanziiert und deklariert. Hier ist mein Code:

class Something {
    private things: Thing[][];

    constructor() {
        things = [][]; ??? how instantiate object ???

        for(var i: number = 0; i < 10; i++) {
            this.things[i] = new Thing[];   ??? how instantiate 1st level ???
            for(var j: number = 0; j< 10; j++) {
                this.things[i][j] = new Thing();   ??? how instantiate 2nd lvl item ???
            }
        }
    }
}

Können Sie mir einen Hinweis auf ausgewählte Orte geben?

Antwort #1

Sie benötigen nur [], um ein Array zu instanziieren - dies gilt unabhängig von seinem Typ. Die Tatsache, dass das Array vom Typ Array ist, spielt keine Rolle.

Dasselbe gilt für die erste Ebene in deiner Schleife. Es ist lediglich ein Array und [] ist ein neues leeres Array - Aufgabe erledigt.

Was die zweite Ebene betrifft, wenn Thing eine Klasse ist, dann ist new Thing() völlig in Ordnung. Andernfalls, abhängig vom Typ, benötigen Sie möglicherweise eine Fabrikfunktion oder einen anderen Ausdruck, um eine zu erstellen.

class Something {
    private things: Thing[][];

    constructor() {
        this.things = [];

        for(var i: number = 0; i < 10; i++) {
            this.things[i] = [];
            for(var j: number = 0; j< 10; j++) {
                this.things[i][j] = new Thing();
            }
        }
    }
}

Antwort #2

Hier ist ein Beispiel für die Initialisierung eines boolean[][]:

const n = 8; // or some dynamic value
const palindrome: boolean[][] = new Array(n)
                                   .fill(false)
                                   .map(() => 
                                     new Array(n).fill(false)
                                   );

Antwort #3

Wenn du es getippt machen willst:

class Something {

  areas: Area[][];

  constructor() {
    this.areas = new Array<Array<Area>>();
    for (let y = 0; y <= 100; y++) {
      let row:Area[]  = new Array<Area>();      
      for (let x = 0; x <=100; x++){
        row.push(new Area(x, y));
      }
      this.areas.push(row);
    }
  }
}

Verwandte Artikel