【发布时间】:2018-12-05 20:36:04
【问题描述】:
我正在提取 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}});
但它给了我错误-不是哈希参考
所以我尝试对数组 ref 进行排序
$data = sort { join('', (split '-', $a)[0,1,2]) cmp join('', (split '-', $b)[0,1,2]) } @{$data};
但我得到了 undef 值。
如果我使用foreach my $tender(@{$data}){} 循环它,我将获得数据引用中的值
有人可以帮我使用 response_date 对其进行排序吗 我需要对它进行排序
{
'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'
},
【问题讨论】:
-
你有一个哈希数组,其中一个键有一个哈希数组作为值。你能更具体地说明你想要排序吗?您能否提供一个排序的预期输出示例?
-
我需要按响应日期排序的最后一个哈希
-
“最后一个哈希”是什么意思?哈希本质上是无序的。例如,您可以按排序打印它,或重新排列(排序)数组中的 hashrefs(您似乎显示的内容)。您可以编辑“排序”示例以显示您想象的排序的整个数据结构吗?请修正缩进?
-
第二个例子的数据与第一个不同。这是您希望如何排序的示例,还是要对另一个数据集进行排序?请编辑以阐明您要执行的操作。
-
这看起来像
XML::Simple输出。是吗?使用不同的方法是有原因的,这会让你的很多问题成为争论的焦点。