簡體   English   中英

如何對2D數組Perl排序?

[英]How to Sort 2D array Perl?

可能是我缺少了一些東西。 首先,這對我來說似乎太容易了。我以為我可以使用map{}sort{}map{}輕松實現它,但現在對我來說變得很復雜。

所以,最后的問題是我有一個數組:

@array=(['b','e','d'],['s','a','f'],['g','i','h']);

我想要排序的數組像

@sorted_array=(['a','f','s'],['b','d','e'],['g','h','i']);

我寫

##sort based on columns########
my @sorted_array= map{my @sorted=sort{$a cmp $b}@$_;[@sorted]}@array;

###sort on rows####
my @sorted_array= map{$_->[0]}sort{$a->[1] cmp $b->[1]} map{[$_,"@$_"]}@array;

但是我不確定如何將其包裝為一個(行和列)。 我可以使用Schwartzian變換來實現嗎

是的,您可以使用它,

use strict;
use warnings;

my @array =( [qw(b e d)], [qw(s a f)], [qw(g i h)] );

my @sorted_array = 
map { $_->[0] }
sort {
  $a->[1] cmp $b->[1]
}
map {
  my $r = [ sort @$_ ];
  [$r, "@$r"];
}
@array;

use Data::Dumper;
print Dumper \@sorted_array;

產量

$VAR1 = [
      [
        'a',
        'f',
        's'
      ],
      [
        'b',
        'd',
        'e'
      ],
      [
        'g',
        'h',
        'i'
      ]
    ];

這是兩種不同的類型。 首先,您要對內部數組進行單獨排序,然后可以按每個內部數組的第一個元素對外部數組進行排序。

use List::UtilsBy qw( sort_by );

my @array =( [qw(b e d)], [qw(s a f)], [qw(g i h)] );

# sort the inner ones individually
@$_ = sort @$_ for @array;

# sort the whole by the first element of each
my @sorted_array = sort_by { $_->[0] } @array;

或者,如果您希望一次性完成所有操作並避免臨時更改,請執行以下操作:

my @sorted_array = sort_by { $_->[0] }
                   map { [ sort @$_ ] } @array;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM