6 arrays perl hash perl-data-structures
我有一个函数将Excel数据提取到一个哈希数组中,如下所示:
sub set_exceldata {
my $excel_file_or = '.\Excel\ORDERS.csv';
if (-e $excel_file_or) {
open (EXCEL_OR, $excel_file_or) || die("\n can't open $excel_file_or: $!\n");
while () {
chomp;
my ( $id, $date, $product, $batchid, $address, $cost ) = split ",";
my %a = ( id => $id
, date => $date
, product => $product
, batchid => $batchid
, address => $address
, cost => $cost
);
push ( @array_data_or, \%a );
}
close EXCEL_OR;
}
}
Run Code Online (Sandbox Code Playgroud)
填充哈希数组是很好的.但是,困难的部分是在数组中搜索特定项(哈希).我似乎无法找到可能具有id或21,或batchid为15或成本> $ 20等的项目.
我将如何实施这样的搜索工具?
谢谢大家,
Que*_*tin 20
凭借grep的力量
my @matching_items = grep {
$_->{id} == 21
} @array_data_or;
Run Code Online (Sandbox Code Playgroud)
如果您知道只返回一个项目,您可以这样做:
my ($item) = grep {
$_->{id} == 21
} @array_data_or;
Run Code Online (Sandbox Code Playgroud)
(未经测试,我有一段时间没有写过这些,但这应该有效)
如果你确定搜索总是只返回一次,或者如果你只对第一次匹配感兴趣,那么你可以使用List :: Util中的'first'子程序
use List::Util;
my %matching_hash = %{ first { $_->{id} == 21 } @array_data_or };
Run Code Online (Sandbox Code Playgroud)
我在%{}块中包含了子例程调用,以确保RHS评估为哈希.