我正在使用Typescript,我想知道如何正确实例化和声明多维数组。这是我的代码:
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 ???
}
}
}
}
你能否给我一些关于选定地点的提示?
答案 0 :(得分:74)
您只需要[]
来实例化一个数组 - 无论其类型如何都是如此。数组属于数组类型的事实并不重要。
同样的事情适用于循环的第一级。它只是一个数组而[]
是一个新的空数组 - 完成了工作。
至于第二级,如果Thing
是一个类,那么new Thing()
就可以了。否则,根据类型,您可能需要工厂函数或其他表达式来创建一个。
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();
}
}
}
}
答案 1 :(得分:7)
如果你想这样做,请输入:
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);
}
}
}
答案 2 :(得分:1)
以下是初始化boolean [] []的示例:
const n = 8; // or some dynamic value
const palindrome: boolean[][] = new Array(n).fill(false).map(() => new Array(n).fill(false));
答案 3 :(得分:1)
您可以执行以下操作(我认为这很简单,但实际上是正确的)。 对于任何试图找到如何在TypeScript中初始化二维数组的人(如我自己)。
让我们假设您要初始化任何类型的二维数组。您可以执行以下操作
const myArray: any[][] = [];
然后,当您要填充它时,可以执行以下操作:
myArray.push([<your value goes here>]);
上述内容的简短示例如下:
const myArray: string[][] = [];
myArray.push(["value1", "value2"]);
答案 4 :(得分:-2)
提防使用push方法,如果不使用索引,它将无法正常工作!
var main2dArray: Things[][] = []
main2dArray.push(someTmp1dArray)
main2dArray.push(someOtherTmp1dArray)
仅提供1行数组!
使用
main2dArray[0] = someTmp1dArray
main2dArray[1] = someOtherTmp1dArray
使二维阵列正常工作 !!!
其他要当心! foreach不适用于2d阵列!