【问题标题】:Perl: Filter AoH outputPerl:过滤 AoH 输出
【发布时间】:2015-05-01 19:55:05
【问题描述】:

我正在尝试对我的 AoH 进行排序,如下所示:

$VAR1 = [
              {
                'Name' => 'John',
                'Lastname' => 'Derp',
                'Organization' => 'Finance',
                'OfficeNR' => '23',
                'ID' => '145'
              },
              {
                'Name' => 'Kate',
                'Lastname' => 'Herp',
                'Organization' => 'HR',
                'OfficeNR' => '78',
                'ID' => '35'
              },
              {
                'Name' => 'Jack',
                'Lastname' => 'Serp',
                'Organization' => 'Finance',
                'OfficeNR' => '23',
                'ID' => '98'
              }
       ];

我要做的是使用 AoH 中的键过滤我的输出,例如仅打印出具有 'Organization' => 'Finance' 的那些。

我尝试使用新数组来解决它:

my @SortedAoH = sort { {Organization=>{'Finance'}} } @AoH;

但它不起作用。

【问题讨论】:

    标签: arrays perl hash output


    【解决方案1】:

    你想要的是grep,而不是sort。你也弄错了等价检查的基本语法。

    无论如何,过滤器是:

    my @finance_orgs = grep { $_->{'Organization'} eq 'Finance' } @AoH;
    

    @finance_orgs 变量现在将只包括将Organization 设置为Finance 的变量。

    只是对片段的解释:

    • $_ 变量是在块中隐含值时分配的变量,例如在 grepmap 或在没有显式命名变量的 for 循环中。
    • $_->{'Organization'} 在遍历数组中的每个条目时对哈希执行哈希查找。
    • eq 是用于测试字符串等价的运算符(而不是测试数字等价的==)。

    【讨论】:

      猜你喜欢
      • 2015-11-14
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 2021-07-02
      • 1970-01-01
      相关资源
      最近更新 更多