我有使用 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/