perl - 如何在 Perl 中惯用地访问单个元素哈希的第一个元素?

标签 perl hash

我有使用 DBI 的 fetchall_hashref() 获取一些数据的脚本。

通常它会返回一个哈希引用,如下所示:

{ 1 => { id => 1 } }

但是,我只对哈希中第一项的值感兴趣,它是特定列的最大值。我知道 Perl 哈希没有排序,但幸运的是,这个特定的查询总是准确地返回 1 或 0 条记录(因为这是一个 MAX() 查询)。

但是目前用来实现这一点的代码真的很难看:
$results->{(keys %{$results})[0]}->{'id'};

有没有更优雅的方式来激活它? (不借助 CPAN 模块)

澄清

我从我们内部使用的数据访问层获取哈希值。一切都通过 fetchall_hashref() 返回。我不调用 fetchall_hashref() 本身,它只是内部实现数据访问函数的方式,所以有人告诉我。我是该返回数据的消费者,它恰好是散列的形式。我正在寻找一种更简洁的方法(如果存在)来访问单个返回值查询的结果

最佳答案

您可以取消引用 id %$results 中第一个值的键:

(values %$results)[0]->{id};

通常,这不会是 well defined自从 the ordering of values returned keys or values can be different even between runs on the same machine using the same perl ,但既然你说%$results只能包含一个或零个元素,这是一种有效的方法。

关于perl - 如何在 Perl 中惯用地访问单个元素哈希的第一个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11359406/

相关文章:

regex - 正则表达式之谜

c# - 如何为按值比较的类编写良好的 GetHashCode() 实现?

ruby - Ruby 运行时中的两个求和算法不会通过 LeetCode

regex - Perl 中的 qr/和 m/有什么区别?

arrays - 我可以在 Perl 中命名一个匿名数组吗?

ios - phpass 在 swift 中散列类似的功能

algorithm - 在固定长度的输入上证明完美的哈希函数

ruby-on-rails - 将 ruby​​ 哈希转换为 json 对象

regex - 在 Perl 中的条件之后计算正则表达式中的字符串

perl - 在进程运行时从键盘读取一个键