Linux 用perl脚本平铺窗口-嵌套数组是个坏主意吗?
我正在编写一个脚本,它将在Perl中动态平铺X11窗口。到目前为止,我将使用一个包含窗口坐标、大小和ID的数组来存储会话期间平铺窗口的状态。这是一个好主意还是我应该以任何其他方式组织这些信息?数组的数组,或数组或哈希,或哈希的哈希,或数组的哈希的哈希在perl中非常好,perl中的数据处理如此简单的原因之一。你不必害怕他们 在Perl中,复合结构的标准表示形式是(受祝福的)散列。除非您有严重的性能问题,否则将数据分组为散列将是一个好主意 OTOH,数组适合于统一的数据。但是,当您有具有唯一ID的数据时(X窗口确实有ID,对吗?),哈希也是一种更自然的结构。你就这么说Linux 用perl脚本平铺窗口-嵌套数组是个坏主意吗?,linux,arrays,perl,perl-data-structures,Linux,Arrays,Perl,Perl Data Structures,我正在编写一个脚本,它将在Perl中动态平铺X11窗口。到目前为止,我将使用一个包含窗口坐标、大小和ID的数组来存储会话期间平铺窗口的状态。这是一个好主意还是我应该以任何其他方式组织这些信息?数组的数组,或数组或哈希,或哈希的哈希,或数组的哈希的哈希在perl中非常好,perl中的数据处理如此简单的原因之一。你不必害怕他们 在Perl中,复合结构的标准表示形式是(受祝福的)散列。除非您有严重的性能问题,否则将数据分组为散列将是一个好主意 OTOH,数组适合于统一的数据。但是,当您有具有唯一ID的
do_something($windows->{$id}->{x});
而不是
foreach (@$windows) {
if ($_->{id} == $id ) {
do_something($_->{x});
};
}
适当的结构取决于您将如何访问和处理数据结构。选择正确的结构是解决程序的一个重要部分。选择错误的结构,一个简单的问题就会变得困难。结构非常重要,有时您需要将现有结构转换为更适合您需要执行的工作类型的形式 以下两条基本规则将帮助您选择结构图元:
my @foo = (
{ name => 'a', id => '321' },
{ name => 'b', id => '123' },
);
my %foo_by_name = map { $_{name} => $_ } @foo;
my %foo_by_id = map { $_{id } => $_ } @foo;
如果您需要操作复杂的集合(添加和移除元素),请考虑包装对象中的各种结构,以确保所有底层结构都被统一管理。
< P>我遵循的准则是:如果保持元素的顺序很重要,请使用数组;否则,使用散列散列比数组慢,但通过选择有意义的键,它们更容易维护。所以我更喜欢它们而不是数组。子数组的散列也很好!事实上,我很快就注意到了这一点,我很想尝试一下,但我担心这会把整个事情弄得一团糟。)PS:请确保您了解Data::Dumper(),它可以帮助您可视化您的混乱状态。>>适当的结构取决于。。。这正是《Unix编程的艺术》中所写的内容,也是我提出这个问题的原因。)谢谢你的回答,这很有帮助。我正在考虑一个sub,它会为任何作为它的参数发生的事情分配空间,不管它是一个窗口还是另一个splitting sub,后者不会有ID。但是无论如何,谢谢你的回答!不要认为总共处理40个元素会很慢,所以我会在这里考虑数组,谢谢!