web-dev-qa-db-fra.com

Typescript - initialisation de tableau multidimensionnel

Je joue avec TypeScript et je me demande comment instancier et déclarer correctement un tableau multidimensionnel. Voici mon 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 ???
            }
        }
    }
}

Pouvez-vous me donner un indice sur les lieux sélectionnés?

58
Fka

Vous n'avez besoin que de [] pour instancier un tableau - ceci est vrai quel que soit son type. Le fait que le tableau soit d'un type de tableau est immatériel.

La même chose s’applique au premier niveau de votre boucle. Il ne s'agit que d'un tableau et [] est un nouveau tableau vide - travail effectué.

En ce qui concerne le deuxième niveau, si Thing est une classe, alors new Thing() ira très bien. Sinon, selon le type, vous aurez peut-être besoin d'une fonction fabrique ou d'une autre expression pour en créer une.

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

Si vous voulez le faire tapé:

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

Voici un exemple d'initialisation d'un booléen [] []:

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