我有一个数据结构,它是一个包含哈希数组的哈希.我想到达那里并拿出与我正在寻找的值相匹配的第一个哈希值.我试过这个:
my $result = shift grep {$_->{name} eq 'foo'} @{$hash_ref->{list}};
Run Code Online (Sandbox Code Playgroud)
但是,这给了我这个错误:Type of arg 1 to shift must be array (not grep iterator). 我重读的perldoc的grep,我觉得我在做什么是有意义的. grep返回一个列表,对吗?它是在错误的背景下吗?
我现在将使用一个临时变量,但我想弄清楚为什么这不起作用.
Que*_*tin 18
my ($result) = grep {$_->{name} eq 'foo'} @{$hash_ref->{list}};
Run Code Online (Sandbox Code Playgroud)
......应该做好这份工作.从列表上下文中的grep返回,但不要分配除第一个之外的任何值.
Leo*_*ans 17
我认为更好的方法是写这个:
use List::Util qw/first/;
my $result = first { $_->{name} eq 'foo' } @{ $hash_ref->{list} };
Run Code Online (Sandbox Code Playgroud)
不仅会更清楚你要做什么,它也会更快,因为一旦找到匹配的元素,它将停止grepping你的数组.
| 归档时间: |
|
| 查看次数: |
2779 次 |
| 最近记录: |