gpt4 book ai didi

java - 将二维以上的java数组视为列表

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:07 24 4
gpt4 key购买 nike

我正在使用 Groovy 编写处理 BASIC 的 DSL,我希望获得有关如何处理多维(多于 2)维数组的帮助。

我正在处理这样的 BASIC 代码:

100 LET X = A(1, 2, 3)

处理一维的情况很容易——只需创建一个闭包(通过 MOP)返回 A 的元素,而对于二维我可以在表单中做同样的事情

A(2, 3) == A.get(2)[3]

但是我该如何处理无限维度的数组呢?

更新:为了更清楚一点,问题是如何在 DSL 上下文中动态返回数组值?脚本解释器将 A(1, 2, 3) 视为一个函数调用,我可以使用 MOP 拦截它。但是如何在该上下文中返回数组元素的值?

最佳答案

如果您使用嵌套列表建模的 n 维数组(这不是最节省内存的方法,但很容易实现),并且想要访问索引 [i_1, i_2, . .. , i_n] 你可以这样做:

def getElementAt(arr, ... indexes) {
indexes.inject(arr) { a, ind -> a[ind] }
}

// A 2x2x3 array implemented with nested lists.
def arr = [[[1,1,1], [1,1,5]], [[1,1,1], [1,1,1]]]

// I want to get that 5!
assert getElementAt(arr, 0, 1, 2) == 5

// The line above is equivalent to:
assert arr[0][1][2] == 5

inject允许您迭代集合并从初始值开始累积给定操作的结果。在这种情况下,我们迭代我们想要从数组中获取的索引,并从整个数组开始迭代;然后每次迭代返回给定索引处的子数组,这是将在下一次迭代中使用的值。如果你碰巧用比预期少的索引使用它,它会返回一个列表而不是一个整数,例如getElementAt(arr, 0, 1) == [1, 1, 5]

关于java - 将二维以上的java数组视为列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11057860/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com