【问题标题】:How to create variable array name in foreach loop for perl如何在foreach循环中为perl创建变量数组名
【发布时间】:2018-11-03 03:36:18
【问题描述】:

我想在 foreach 循环中创建一个数组来更改名称本身

our $j = 1;

foreach $key ( sort keys %hash ){
    @array1 = $hash{$key};
    $j++;
}

如何使用$j 更改数组名称。像每个键一样,我的数组名称将从 @array1, @array2, @array3....

【问题讨论】:

  • 当你认为你想要一系列名为var1var2var3、...的变量时,只需使用数组来代替(var[0]var[1]、@987654329 @, ...)。

标签: arrays perl foreach


【解决方案1】:

这需要symbolic references 和你don't want to be doing that。 这是一个危险的功能,由于非常具体的原因,它实际上是非常需要和很少使用的。对于所有其他目的,还有其他更好的方法。

改为使用存储在a data structure 中的匿名数组(或数组references)和数组

my @data;
foreach $key (sort keys %hash) {
    push @data, [ ... ];          # (populate with $hash data) 
}

或散列

my %data;
foreach $key (sort keys %hash) {
    my $name     = ...;            # work out a suitable key-name
    $data{$name} = [ ... ];        # populate with $hash data
}

我不知道在匿名数组[ ... ] 中放置什么,或者键的好名称 ($name) 是什么,因为它没有说明哈希中的内容。

可以想象,你的hash值本身其实就是arrayrefs,在这种情况下

my @data;
foreach $key (sort keys %hash) {
    push @data, $hash{$key}; 
}

似乎符合这个问题,但实际上只是

my @data = map { $hash{$_} } sort keys %hash;

或者,如果您不需要基于键的可预测顺序

my @data = values %hash;

但我认为在将哈希数据存储到数组之前,还有更多的事情要做。

然后您可以通过索引(或在哈希的情况下按名称)引用各个数组(参考)。

【讨论】:

    【解决方案2】:
    for(my $i=0;$i<100;$i++){
    my @arr_i=($i);
    print(@arr_i,"\n");
     }
    

    【讨论】:

      猜你喜欢
      • 2013-05-16
      • 2013-11-22
      • 2020-01-16
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      相关资源
      最近更新 更多