アプリ版:「スタンプのみでお礼する」機能のリリースについて

("いちご","リンゴ","サクランボ","みかん")
が入ったリストを、「sort」関数で並び替えすると

いちご、みかん、サクランボ、リンゴ

このように前半にひらがな、後半にカタカナで処理されます。それを、

いちご、サクランボ、みかん、リンゴ

このようにひらがなとカタカナを混ぜて五十音順にしたいのですが、
どうすればいいのでしょうか

よろしくお願いします

A 回答 (2件)

#こんな感じでどうでしょう


use encoding 'shiftjis';

@data=("いちご","リンゴ","サクランボ","みかん");

foreach $x (@data){
$data{$x}=&toKana($x);
}

@data=sort { $data{$a} cmp $data{$b} } keys %data;

sub toKana($){
my $str = shift;
$str =~ tr/ぁ-ん/ァ-ン/;
return $str;
}
    • good
    • 0
この回答へのお礼

解決しました
ありがとうございました!

お礼日時:2005/12/17 23:41

ひらがな、かたかな、どちらかに変換した文字を先頭においてからソートしては?


ShiftJISであればですが、以下のように。

#!Perl
use ShiftJIS::String;

@kana_list = ('いちご', 'みかん', 'サクランボ', 'リンゴ');
print "1st state:\n", join("\n", @kana_list), "\n\n";

for (@kana_list) {
my $tmp = $_;
ShiftJIS::String::strtr(\$tmp, 'ぁ-ん', 'ァ-ン', 'o');
$_ = $tmp . "\t" . $_;
}
print "2nd state:\n", join("\n", @kana_list), "\n\n";

@kana_list = sort @kana_list;
print "3nd state:\n", join("\n", @kana_list), "\n\n";

$_ = (split(/\t/, $_))[1] for @kana_list;
print "4th state:\n", join("\n", @kana_list), "\n\n";

__END__

D:\@ai\@Perl\app>KANA_SORT.pl
1st state:
いちご
みかん
サクランボ
リンゴ

2nd state:
イチゴ いちご
ミカン みかん
サクランボ サクランボ
リンゴ リンゴ

3nd state:
イチゴ いちご
サクランボ サクランボ
ミカン みかん
リンゴ リンゴ

4th state:
いちご
サクランボ
みかん
リンゴ


D:\@ai\@Perl\app>
    • good
    • 0
この回答へのお礼

難しいですね^^;

ありがとうございましたm(_ _)m

お礼日時:2005/12/17 23:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!