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