我正在提取一个XML并将该值作为引用传递。引用中的数据是
$VAR1 = [
{
'tender_data' => [
{
'total_mwh' => '191.4600',
'retailer_code' => 'Origin',
'client_num' => '20180516-03',
'response_date' => '2018-05-22',
'nmi' => 'NGGG000692',
'month_name' => 'May',
'ext_date' => '2018-5',
'client_name' => 'Alpha Hotel Canberra',
'result' => 'lost'
}
],
'state' => 'ACT'
},
{
'tender_data' => [
{
'total_mwh' => '445.6410',
'retailer_code' => 'ERM Power',
'client_num' => '20110317-05',
'response_date' => '2018-05-14',
'nmi' => 'QB00457566',
'month_name' => 'May',
'ext_date' => '2018-5',
'client_name' => 'Thunderbird Park',
'result' => 'lost'
},
{
'total_mwh' => '910.2670',
'retailer_code' => 'AGL',
'client_num' => '20140625-02',
'response_date' => '2018-05-24',
'nmi' => 'QB09015582',
'month_name' => 'May',
'ext_date' => '2018-5',
'client_name' => 'Geewood Pty Ltd',
'result' => 'undecided'
},
{
'total_mwh' => '120.4290',
'retailer_code' => 'AGL',
'client_num' => '20180502-02',
'response_date' => '2018-05-18',
'nmi' => 'QB00493554',
'month_name' => 'May',
'ext_date' => '2018-5',
'client_name' => 'Beaudesert Race Club Inc',
'result' => 'won'
},
],
'state' => 'QLD'
},
];现在的问题是,我试图通过response_date对散列进行排序,但我无法解决它。我试过这段代码
$data = (sort { join('', (split '-', $data->{$a}->{response_date})[0,1,2]) cmp join('', (split '-', $data->{$b}->{response_date})[0,1,2]) } keys %{$data->{tender_data}});但这给了我一个错误-不是一个散列裁判
所以我试着用排序数组引用
$data = sort { join('', (split '-', $a)[0,1,2]) cmp join('', (split '-', $b)[0,1,2]) } @{$data};但我得到了无限的价值。如果我使用foreach my $tender(@{$data}){}循环它,我将得到数据引用中的值。
有谁能帮我用response_date对it进行排序吗?
{
'total_mwh' => '445.6410',
'retailer_code' => 'ERM Power',
'client_num' => '20110317-05',
'response_date' => '2018-05-14',
'nmi' => 'QB00457566',
'month_name' => 'May',
'ext_date' => '2018-5',
'client_name' => 'Thunderbird Park',
'result' => 'lost'
},
{
'total_mwh' => '120.4290',
'retailer_code' => 'AGL',
'client_num' => '20180502-02',
'response_date' => '2018-05-18',
'nmi' => 'QB00493554',
'month_name' => 'May',
'ext_date' => '2018-5',
'client_name' => 'Beaudesert Race Club Inc',
'result' => 'won'
},
{
'total_mwh' => '910.2670',
'retailer_code' => 'AGL',
'client_num' => '20140625-02',
'response_date' => '2018-05-24',
'nmi' => 'QB09015582',
'month_name' => 'May',
'ext_date' => '2018-5',
'client_name' => 'Geewood Pty Ltd',
'result' => 'undecided'
},发布于 2018-06-27 05:12:14
给定一个散列数组:
$data = [
{'response_date' => '2018-05-18', 'client_name' => 'Beaudesert Race Club Inc'},
{'response_date' => '2018-05-14', 'client_name' => 'Thunderbird Park'},
{'response_date' => '2018-05-24', 'client_name' => 'Geewood Pty Ltd'},
];您可以使用以下方法按'response_date'键对其进行排序:
sort {$$a{response_date} cmp $$b{response_date}} @$data例如:
# perl -MData::Dumper
$data = [
{'response_date' => '2018-05-18', 'client_name' => 'Beaudesert Race Club Inc'},
{'response_date' => '2018-05-14', 'client_name' => 'Thunderbird Park'},
{'response_date' => '2018-05-24', 'client_name' => 'Geewood Pty Ltd'},
];
print Dumper([sort {$$a{response_date} cmp $$b{response_date}} @$data]);
$VAR1 = [
{
'client_name' => 'Thunderbird Park',
'response_date' => '2018-05-14'
},
{
'response_date' => '2018-05-18',
'client_name' => 'Beaudesert Race Club Inc'
},
{
'client_name' => 'Geewood Pty Ltd',
'response_date' => '2018-05-24'
}
];https://stackoverflow.com/questions/51054462
复制相似问题