我无法决定哪种方法更 (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
的对象列表。 , size
和 volume
属性。当你这样想时,甚至没有理由考虑第二种方法。
如果遇到问题,您可以稍后再考虑优化,但即使您这样做,您也可能会从 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/