首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按Perl中数组的值对数组ref排序

按Perl中数组的值对数组ref排序
EN

Stack Overflow用户
提问于 2018-06-27 04:16:00
回答 1查看 217关注 0票数 0

我正在提取一个XML并将该值作为引用传递。引用中的数据是

代码语言:javascript
复制
$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对散列进行排序,但我无法解决它。我试过这段代码

代码语言:javascript
复制
$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}});

但这给了我一个错误-不是一个散列裁判

所以我试着用排序数组引用

代码语言:javascript
复制
$data = sort { join('', (split '-', $a)[0,1,2]) cmp join('', (split '-', $b)[0,1,2]) } @{$data};

但我得到了无限的价值。如果我使用foreach my $tender(@{$data}){}循环它,我将得到数据引用中的值。

有谁能帮我用response_date对it进行排序吗?

代码语言:javascript
复制
{
    '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'
},
EN

回答 1

Stack Overflow用户

发布于 2018-06-27 05:12:14

给定一个散列数组:

代码语言:javascript
复制
$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'键对其进行排序:

代码语言:javascript
复制
sort {$$a{response_date} cmp $$b{response_date}} @$data

例如:

代码语言:javascript
复制
# 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'
          }
        ];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51054462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档