TypeScript - inicializácia viacrozmerného poľa


Hrávam sa s Typescriptom a zaujímalo by ma, ako správne vytvoriť a deklarovať viacrozmerné pole. Tu je môj kód:

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 ???
            }
        }
    }
}

Môžeš mi dať nejakú nápovedu ohľadom vybraných miest?

Odpoveď č. 1

Na vytvorenie poľa potrebujete iba [] - toto platí bez ohľadu na jeho typ. Fakt, že pole je typu poľa, je nepodstatný.

To isté platí aj na prvej úrovni vo vašom cykle. Je to len pole a [] je nové prázdne pole - práca hotová.

Pokiaľ ide o druhú úroveň, ak je Thing trieda, potom new Thing() bude úplne v poriadku. Inak, v závislosti od typu, možno budete potrebovať factory funkciu alebo iný výraz na jeho vytvorenie.

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();
            }
        }
    }
}

Odpoveď č. 2

Tu je príklad inicializácie boolean[][]:

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

Odpoveď č. 3

Ak to chceš urobiť písomne:

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);
    }
  }
}

Súvisiace články