Ruby多维数组和用户定义的函数

时间:2018-04-02 09:07:47

标签: arrays function global

我有很多多维数组。一个简化的例子:

t0 = [2, 1, 3, 2, 2, 2, 2, 1, 2, 3]
t1 = [1, 2, 1, 3, 2, 2, 2, 2, 1, 2]
t2 = [2, 1, 3, 2, 2, 2, 2, 1, 2, 3]
t3 = [2, 1, 1, 3, 1, 4, 2, 2, 1, 2]
t4 = [2, 1, 3, 1, 2, 2, 2, 2, 1, 2]
t = [t0,t1,t2,t3,t4]
instance1= [t]

处理每个单元格。对于每个单元,访问和更新8个连接单元(想想地形图)以及其他几个数组中的等效单元。例如:

for h in 1..3
    for i in 1..8
        if instance1[0][i][h] == 4   # burning
            if instance1[0][i-1][h-1] > 0 && instance1[0][i-1][h-1] < 4
                # check probability
                probability =  Fernandes1(moisturex[0][i-1][h-1], windspeed, temperature, fueltypex[0][i-1][h-1])
                if probability > 0.5
                    instance2[0][i-1][h-1] = 4    # now burning
                end
            end
            if instance1[0][i-1][h] > 1 && instance1[0][i-1][h] < 4
                # check probability
             ...................................

我想在用户定义的函数中执行此处理。我想全局变量的替代方法是将所有变量作为函数参数传递,但这将非常繁琐且容易出错 - 存在这么多。

将数组声明为全局的最佳方法是什么?

$t0 = [2, 1, 3, 2, 2, 2, 2, 1, 2, 3]
$t1 = [1, 2, 1, 3, 2, 2, 2, 2, 1, 2]
$t2 = [2, 1, 3, 2, 2, 2, 2, 1, 2, 3]
$t3 = [2, 1, 1, 3, 1, 4, 2, 2, 1, 2]
$t4 = [2, 1, 3, 1, 2, 2, 2, 2, 1, 2]
$t = [$t0,$t1,$t2,$t3,$t4]
$instance1= [$t]

就像这里一样,我是否需要将所有子数组定义为全局变量或者只是我在用户定义函数中直接引用的数组?或者通过将外部数组(即$ instance1)定义为全局,子数组是否变为全局?

非常感谢任何指导

1 个答案:

答案 0 :(得分:0)

确定只引用被引用的全局变量似乎工作正常(例如外部数组但不是子数组。我猜Globals的唯一开销就是持续使用内存。

但我想知道是否还有更多的Rubiesque方式。