加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl中的数组排序

发布时间:2020-12-15 23:34:08 所属栏目:大数据 来源:网络整理
导读:我是Perl的新手并且遇到了一个(很简单的)数组排序问题. 我继承了一些Perl代码,它将文本文件中的行读入三个1-D数组(x,y,z).我希望能够使用其中一个维度作为关键字对这些数组进行排序,并重新排序其他两个维度以匹配. 例如,如果我的输入是: @x =(1,3,2) @y =(1
我是Perl的新手并且遇到了一个(很简单的)数组排序问题.

我继承了一些Perl代码,它将文本文件中的行读入三个1-D数组(x,y,z).我希望能够使用其中一个维度作为关键字对这些数组进行排序,并重新排序其他两个维度以匹配.

例如,如果我的输入是:

> @x =(1,3,2)
> @y =(11,13,12)
> @z =(21,23,22)

我按x排序,我希望结果如下:

> @x =(1,2,3)
> @y =(11,12,13)
> @z =(21,22,23)

如果能让生活更轻松,我可以将三个1-D阵列合并为2-D阵列.

解决方法

use strict;
use warnings;
use Data::Dumper;

use List::Util qw(reduce);

my @x = (1,2);
my @y = (11,12);
my @z = (21,22);

my @combined = map { [ $x[$_],$y[$_],$z[$_] ] } 0 .. $#x;
my @sorted = sort { $a->[0] <=> $b->[0] } @combined;
my $split_ref = reduce { push @{$a->[$_]},$b->[$_] for 0 .. $#$a; $a;} [[],[],[]],@sorted;

print Dumper @combined;
print Dumper @sorted;
print Dumper $split_ref;

这基本上会给你:

[
      [
        1,3
      ],[
        11,13
      ],[
        21,23
      ]
    ];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读