gpt4 book ai didi

arrays - 我应该选择散列、对象还是数组来表示 Perl 中的数据实例?

转载 作者:行者123 更新时间:2023-12-01 07:11:45 24 4
gpt4 key购买 nike

我一直在想这个问题,但从未真正深入研究过。

情况是这样的:我有一组比较大的数据实例。每个实例具有相同的集合或属性,例如:

# a child instance
name
age
height
weight
hair_color
favorite_color
list_of_hobbies

通常我会将一个 child 表示为一个散列,并将所有 child 放在一个散列散列(或散列数组)中。

这种方法总是让我困扰的是,我并没有真正使用所有子项(内部哈希)都具有相同结构的事实。如果数据真的很大,似乎在内存方面可能会浪费,所以如果每个内部散列都是从头开始存储的, 的名称似乎是这样的。键名可以占用比数据本身更多的空间......
另请注意,当我构建此类数据结构时,我经常 nstore他们到磁盘。

不知道要不要生个 child 对象 从这个角度来看更有意义,即使我真的不需要面向对象。会更紧凑吗?查询会更快吗?

或者也许将每个 child 表示为一个数组是有道理的?例如。:
my ($name, $age, $height, $weight, $hair_color, $favorite_color, $list_of_hobbies) = 0..7; 
my $children_h = {
James => ["James", 12, 1.62, 73, "dark brown", "blue", ["playing football", "eating ice-cream"]],
Norah => [...],
Billy => [...]
};
print "James height is $children_h->{James}[$height]\n";

回想一下,我主要关注的是空间效率(存储时的 RAM 或磁盘)、时间效率(即加载存储的数据集,然后从实例 y 中获取属性 x 的值)和......便利性(代码可读性等)。

谢谢!

最佳答案

  • Perl 足够聪明,可以在散列之间共享 key 。如果您有 100,000 个具有相同五个键的哈希,perl 将这五个字符串存储一次,并引用它们十万次。担心空间效率不值得你花时间。
  • 基于哈希的对象是最常见的类型,也是最容易使用的类型,因此除非有充分的理由不使用,否则您应该使用它们。
  • 你应该省去很多麻烦,开始使用Moose ,并停止担心对象的内部结构(尽管在你和我之间,Moose 对象是基于哈希的,除非你使用特殊的扩展来使它们否则——再一次,你不应该在没有真正好的情况下这样做原因。)
  • 关于arrays - 我应该选择散列、对象还是数组来表示 Perl 中的数据实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3828678/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com