perl - Perl : an array of hash references or list of "flat" hashes? 中什么更好

标签 perl data-structures

我无法决定哪种方法更 (1) 惯用 Perl,(2) 高效,或 (3)“清晰”。

让我用代码来解释。首先,我可以

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

或者,我可以
sub something {
  ...
  push (@names, "Foo");
  $sizes{Foo}   =  10;
  $volumes{Foo} = 100;
  ...
  return (\@names, \%sizes, \%volumes);
}

两者本质上做同样的事情。重要的是,我需要数组,因为我需要保持顺序。

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

最佳答案

而不是用无意义的术语思考,例如 something ,用具体的术语思考和表述问题。在这种情况下,您似乎正在返回具有 name 的对象列表。 , sizevolume属性。当你这样想时,甚至没有理由考虑第二种方法。

如果遇到问题,您可以稍后再考虑优化,但即使您这样做,您也可能会从 Memoize 中获得更多 yield 。而不是通过爆炸数据结构。

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

sub get_objects {
    my @ret;

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

    return \@ret;
}

关于perl - Perl : an array of hash references or list of "flat" hashes? 中什么更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179720/

相关文章:

regex - 为什么正则表达式引擎不回溯 .*?

java - 当用户在Java中输入数组大小时,如何生成从0到100的随机数而不重复?

c - 我在 queue.h 中的修改是否由 Berkeley 实现?

linux - 为什么 Perl 脚本在 CentOS 的引导过程中运行时找不到某些模块?

perl - 在Dancer应用程序下运行AnyEvent

algorithm - 给定通过图形的路径列表,有效地找到使用每条边的路径

算法 - 如何有效地确保每个数组中的元素是不同的?

python - 是否可以将所有相同的术语加入同一个 pandas 数据框列?

bash - 从大文件中查找和替换

Perl 单行 : deleting a line with pattern matching