1

名前スカラーの配列 ("Joe Hanson"、"James Rutherford McCoy"、"Thomas Jay Samuels" など) が与えられた場合、それらを姓で並べ替えるにはどうすればよいですか?

私は Perl (および一般的なスクリプト言語) に少し慣れていないため、これを理解できないようです。

4

3 に答える 3

5

Schwartzian Transform の仕事のようです (他の人が最後の文字列が姓であると仮定すると):

#!/usr/bin/perl

use warnings;
use strict;

my @names = ( 'Joe Hanson', 'James Rutherford McCoy', 'Thomas Jay Samuels', 'Joe Johnson', 'Tim McGee', 'The Reverend Horton Heat');

my @sorted_names = 
    map { $_->[0] }
    sort { $a->[1] cmp $b->[1] }
    map { [$_, /(\w+)$/] } @names;

print "$_\n" for @sorted_names;

これを実行すると、次のようになります。

Joe Hanson
The Reverend Horton Heat
Joe Johnson
James Rutherford McCoy
Tim McGee
Thomas Jay Samuels
于 2013-10-21T21:15:23.083 に答える
1
#!/usr/bin/perl
use strict;
use warnings FATAL => qw/all/;
use Data::Dumper;

my @names = ("Joe Hanson", "James Rutherford McCoy", "Thomas Jay Samuels");

my @sorted_names = sort bylastname @names;

print Dumper \@sorted_names;

sub bylastname
{
    my $lastname_regexp = qr/(\w+)$/;

    my ($a_lastname) = $a =~ $lastname_regexp;
    my ($b_lastname) = $b =~ $lastname_regexp;

    $a_lastname cmp $b_lastname;
}
于 2013-10-21T21:01:45.307 に答える
0

各要素を Perl の split 関数で分割します。私はあなたが似たようなものが欲しいと思うと思います

@ary = split(/\s+/, $element);

次に、 の最後の要素を取得し@aryます。

http://perldoc.perl.org/functions/split.html

于 2013-10-21T20:52:10.420 に答える