【问题标题】:Typescript - multidimensional array initializationTypescript - 多维数组初始化
【发布时间】:2015-07-20 14:16:06
【问题描述】:

我正在玩 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 ???
            }
        }
    }
}

你能给我一些关于选定地点的提示吗?

【问题讨论】:

    标签: multidimensional-array typescript


    【解决方案1】:

    你只需要[] 来实例化一个数组——不管它的类型如何,这都是真的。数组是数组类型这一事实无关紧要。

    同样的事情也适用于循环的第一级。它只是一个数组,[] 是一个新的空数组 - 工作完成。

    至于第二级,如果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();
                }
            }
        }
    }
    

    【讨论】:

    • 我无法想象,打字是如何保存在这里的。请给我一些例子好吗?
    • 数组中有 0 项,因此没有要输入的值或对象。
    • 我猜,构造函数中应该是this.things = [];
    【解决方案2】:

    如果你想输入:

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

    【讨论】:

    • 谢谢,但并不是每个人都在使用 AngularJs 编写 JS/TS 代码。
    • 这只是标准的 TS 代码,对吧?你认为 AngularJs 是什么?我更喜欢这种带有类型的解决方案。谢谢
    • @WhatWouldBeCool 已编辑答案以删除 AngularJs 特定代码
    【解决方案3】:

    注意push方式的使用,不使用索引就不行!

    var main2dArray: Things[][] = []
    
    main2dArray.push(someTmp1dArray)
    main2dArray.push(someOtherTmp1dArray)
    

    只给出一个 1 行数组

    使用

    main2dArray[0] = someTmp1dArray
    main2dArray[1] = someOtherTmp1dArray
    

    让您的二维数组正常工作!!!

    其他注意! foreach 似乎不适用于 2d 数组

    【讨论】:

      【解决方案4】:

      这里是一个初始化boolean[][]的例子:

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

      【讨论】:

        【解决方案5】:

        您可以执行以下操作(我觉得这很简单,但实际上是正确的)。 对于任何试图找到如何在 TypeScript 中初始化二维数组的人(比如我自己)。

        假设您要初始化任何类型的二维数组。您可以执行以下操作

        const myArray: any[][] = [];

        稍后,当您想要填充它时,您可以执行以下操作:

        myArray.push([&lt;your value goes here&gt;]);

        上面的一个简短示例如下:

        const myArray: string[][] = [];
        myArray.push(["value1", "value2"]);

        【讨论】:

          猜你喜欢
          • 2015-08-01
          • 1970-01-01
          • 2013-04-04
          • 2011-04-03
          • 2015-02-26
          • 1970-01-01
          相关资源
          最近更新 更多