Perl有什么更好的:哈希引用数组或"平"哈希列表?

Kar*_*lek 4 perl data-structures

我无法确定哪种方法更多(1)惯用Perl,(2)有效,或(3)"清除".

让我用代码解释一下.首先,我能做到

sub something {
  ...
  $ref->{size}   = 10;
  $ref->{name}   = "Foo";
  $ref->{volume} = 100;
  push (@references, $ref);
  ...
  return @references;
}
Run Code Online (Sandbox Code Playgroud)

或者,我能做到

sub something {
  ...
  push (@names, "Foo");
  $sizes{Foo}   =  10;
  $volumes{Foo} = 100;
  ...
  return (\@names, \%sizes, \%volumes);
}
Run Code Online (Sandbox Code Playgroud)

两者基本上都是一样的.重要的是,我需要数组,因为我需要保持秩序.

我知道,总有不止一种方法可以做某事,但是,你更喜欢这两种中的哪一种?

Sin*_*nür 10

而不是用毫无意义的术语来思考,而是something用具体的方式思考和表达这个问题.在这种情况下,你似乎是返回拥有对象的列表name,sizevolume属性.当你这样想时,没有理由考虑第二种方法.

如果遇到问题,你可以考虑稍后进行优化,但即使你这样做,你可能会从Memoize获得更多,不是通过爆炸数据结构.

我建议的一个效率改进是从这个子程序返回一个引用:

sub get_objects {
    my @ret;

    while ( 'some condition' ) {
        #  should I return this one?
        push @ret, {
            name => 'Foo',
            size => 10,
            volume => 100,
        };
    }

    return \@ret;
}
Run Code Online (Sandbox Code Playgroud)


Tho*_*mas 5

我非常喜欢前者.它将一个"数据包"(数据,大小,名称,数量)保存在一起,使代码更易读.