【问题标题】:Get the first value of an array of hash with Perl使用 Perl 获取哈希数组的第一个值
【发布时间】:2018-03-24 08:40:57
【问题描述】:

我有一个执行 SQL 查询并将结果作为对哈希数组的引用返回的子例程。

my $value = query("SELECT value from table WHERE foo=bar LIMIT 1");

如何从唯一的哈希中提取第一个值,而不必知道元素的键?

【问题讨论】:

  • 请注意,“哈希中的第一个值”的想法是无效的。哈希没有排序。散列的键没有排序。因此,没有“第一价值”。
  • DBI 有 selectcol_arrayrefselectrow_arrayref 用于这种情况。

标签: arrays perl hash


【解决方案1】:

如果你知道钥匙,那就是

query("...")->[0]{$key}

但你不知道钥匙,所以我们必须抓住它。问题是散列的元素没有排序。你可以抓住一把钥匙,但没有第一把钥匙这样的东西。但看起来你在哈希中只有一个元素,所以下面的方法可以解决问题:

my ($val) = values(%{ query("...")->[0] });
  -or-
my $val = ( values(%{ query("...")->[0] }) )[0];
  -or-
my $val = ( %{ query("...")->[0] } )[1];

这一切都只是解决症状。您的问题源于您正在使用另一个愚蠢的 DBI-wrapper[1]。没有你的包装,你可以简单地做

my ($val) = $dbh->selectrow_array("...");

  1. 为什么每个人都坚持编写使访问数据库变得更加困难的包装器?如果你想更早地访问数据库,不要创建一个只执行 SQL 语句的接口——DBI 已经做得很好——创建一个执行特定任务的接口(例如get_x_for_y($dbh, $y))。

【讨论】:

  • 对不起,我要怎么改写$ref->[0]{$key}$ref->[0][1]
  • @coin:我猜你是从 PHP 来到 Perl,其中数组是有序值的组合,如 Perl 数组,以及键查找,如 Perl 哈希。但是在 Perl 中,“哈希中的第一个值”的想法是无效的。哈希没有排序。散列的键没有排序。因此,没有“第一价值”。您不能将$ref->[0]{$key} 重写为$ref->[0][1]
  • 更新以简化解决方案
  • @AndyLester,也许,但从语法上讲,( %{ $ref->[0] } )[1]$ref->[0][1] 相差不远。 (不过,它没有 $ref->[0][1] 的隐含效率。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-01
  • 2016-07-22
  • 1970-01-01
  • 2011-07-26
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多