【问题标题】:Dynamically creating a 2D array in Groovy在 Groovy 中动态创建二维数组
【发布时间】:2019-04-19 08:15:08
【问题描述】:

我已经阅读了有关 Groovy 2D 数组的所有关于 stackoverflow 的问题,但答案似乎还不够。我对 groovy 也很陌生,因此,我真诚地感谢您在这方面的意见。

我正在尝试通过以下方式创建二维数组。

def extractedArray = []
// fullArray is a 2D array of size[11987][4]

def x = 0
for (x; x<fullArray.length; x++){
    if (x==0){

        extractedArray[] = []

        extractedArray[0][0]=fullArray[0][0]
        extractedArray[0][1]=fullArray[0][2]
    }
    else{

        for(def y=0; y<extractedArray.length; y++){
            //other functions
        }
    }
}

但这似乎给了我以下错误。

Caught: java.lang.NullPointerException: Cannot invoke method putAt() on null object
java.lang.NullPointerException: Cannot invoke method putAt() on null object
    at computeMPR.main(computeMPR.groovy:37)

【问题讨论】:

    标签: arrays dynamic groovy 2d


    【解决方案1】:
    def extractedArray = []
    

    这不是数组而是列表初始化

    所以你可以更改代码:

    //extractedArray[0][0]=fullArray[0][0]
    //extractedArray[0][1]=fullArray[0][2]
    extractedArray << [fullArray[0][0], fullArray[0][2]]
    

    或者如果您更喜欢数组,您可以执行以下操作:

    Object[] extractedArray = [fullArray.size()]
    
    extractedArray[0] = [
                            fullArray[0][0],
                            fullArray[0][2]
                        ] as Object[]
    

    【讨论】:

    • 感谢您的回复。但这就是问题所在。使用Object[] extractedArray = [fullArray.size()],我们正在创建与fullArray 大小相同的extractedArray,对吗?但是,就我而言,我们不知道extractedArray 的大小。我只想定义数组而不指定大小。然后,当我们将值推送到数组时,它的大小会动态增加。
    • 由于我们最初不知道要在数组中存储多少元素,因此数组需要随着元素的插入而动态增长。我知道如何使用 JS 等其他脚本语言来做到这一点,但对 groovy 不太确定。有什么建议?谢谢。
    • 数组一旦创建就不能改变大小。您要么必须分配比您认为需要的更大的空间,要么接受必须重新分配它的开销以增加大小。
    • 但这可以通过 Javascript 实现,对吧?我们简单地声明一个数组,然后当我们向它添加array.push('x') 元素时,数组大小也会增加。 groovy 不也可以吗?
    • Groovy 基于 Java。在 java 中,没有办法创建具有动态大小的数组。集合是为了解决这个问题而开发的。 List 是比常规数组更强大的结构。如果你最后需要数组,你可以简单地将列表转换为数组:list.toArray(new Object[list.size()])
    猜你喜欢
    • 2013-02-22
    • 2011-08-14
    • 2020-05-20
    • 2017-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    相关资源
    最近更新 更多