名前スカラーの配列 ("Joe Hanson"、"James Rutherford McCoy"、"Thomas Jay Samuels" など) が与えられた場合、それらを姓で並べ替えるにはどうすればよいですか?
私は Perl (および一般的なスクリプト言語) に少し慣れていないため、これを理解できないようです。
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
#!/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;
}
各要素を Perl の split 関数で分割します。私はあなたが似たようなものが欲しいと思うと思います
@ary = split(/\s+/, $element);
次に、 の最後の要素を取得し@ary
ます。