gpt4 book ai didi

perl - 如何从哈希元素的引用中获取 key

转载 作者:行者123 更新时间:2023-12-04 22:52:01 26 4
gpt4 key购买 nike

假设 $my_ref = \$hash{'mary'}; #my_ref是哈希元素的引用点。
……
稍后,我该如何使用 $my_ref检索它指向的散列元素的键?即如何从 $my_ref 获取字符串 'mary' ?

我问这个问题是因为我有几组用户名列表,一些用户名出现在多个组中,这会消耗内存。所以我决定创建一个普通的用户名列表,让这些组只存储对应用户名的引用而不是用户名。

例如起初,

%group1 = {'mary'=>1, 'luke'=1,'tom'=1,...}  
%group2 = {'mary'=>1, 'sam'=1,'tom'=1,...}

在这里你可以看到 'mary' 和 'tom' 都显示在 group1 中。和 group2消耗内存。 (注意我不关心这个例子中的值,值在这里只是因为数据结构是一个哈希)。所以为了减少内存,我希望有一个通用列表存储所有用户名:
%common_hash = {'mary'=>1, 'luke'=1,'tom'=1,'sam'=1...};  
$ref1 = \$common_hash{'mary'};
$ref2 = \$common_hash{'luke'};
$ref3 = \$common_hash{'tom'};
$ref4 = \$common_hash{'sam'};

组只存储哈希元素的引用:
%group1 = {$ref1=>1, $ref2=1,$ref3=1,...};  
%group2 = {$ref1=>1, $ref4=1,$ref3=1,...};

我认为这种方法可以节省大量内存,因为:
  • 一个用户名在内存中存储一​​次而不是多次;
  • 组存储引用(整数)而不是字符串(在我的情况下,每个用户名的长度平均为 30 个字节,而每个整数只有 4 个字节(32 位系统)或 8 个字节(64 位系统)) (顺便说一句,如果整数不使用 4 个字节或 8 个字节,请纠正我。)
  • 使用引用我可以立即访问用户名而无需查找。

  • 但是如何从组中获取用户名?

    如果我使用 @my_ref = keys %group1 ,我想我会得到“玛丽”的值(value),但不是“玛丽”。
    $result = $($my_ref[0]);

    最佳答案

  • 引用不是整数;它是一个 SV,所以它将是 24 个字节,而不是 4 个。
  • 没关系,因为你没有存储引用,因为 哈希键总是字符串 .您的%group1 的 key 等哈希实际上是看起来像“HASH(0x19838e2)”的字符串,这是无用的。
  • 这并不重要,因为 Perl 足够聪明,可以避免在多个哈希中使用相同的字符串作为键时浪费内存。没错,如果您只是以简单、明显、明智的方式做事,那么 perl 将使用比您尝试做的复杂事情更少的内存。
  • 关于perl - 如何从哈希元素的引用中获取 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3380411/

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