
No.6ベストアンサー
- 回答日時:
#No.2です。
さして考えもせず「コレ系は二次元ハッシュ」と答えてしまいましたが、
実際に考えるとただのハッシュでした。
失礼しました。
while( <DATA> ) {
chomp;
my ($subject, %results) = split /,/;
my $result;
foreach ( sort { $results{$b} <=> $results{$a} } keys %results ) {
$result .= "$_,$results{$_},";
}
$result = substr($result, 0, -1);
print "$subject," . "$result\n";
}
__DATA__
数学,山田,60,佐藤,80,蓑田,55,岸本,90,小笠原,75
英語,山田,70,佐藤,50,蓑田,81,岸本,99,小笠原,80
No.5
- 回答日時:
while(<>){
chomp;
@s = split(",");
print($s[0],",");
for( $i=0; $i<(@s/2-1); $i++){
$w[$i][0] = $s[$i*2+1];
$w[$i][1] = $s[$i*2+2];
}
@sorted = sort { $a->[1] <=> $b->[1] } @w;
@list = ();
for($i=0;$i<(@s/2-1);$i++){
push @list, $sorted[$i][0], $sorted[$i][1];
}
print join(",",@list);
printf("\n");
}
No.4
- 回答日時:
No.3さんの方針でコーディング。
while( <DATA> ) {
chomp;
my ($subject, %score) = split /,/;
my $sorted = join q{,},
map +( $_, $score{$_} ),
sort { $score{$b} <=> $score{$a} }
keys %score;
print "$subject,$sorted\n";
}
__DATA__
数学,山田,60,佐藤,80,蓑田,55,岸本,90,小笠原,75
英語,山田,70,佐藤,50,蓑田,81,岸本,99,小笠原,80
No.3
- 回答日時:
「もうちょっとなんとかならんものか」という, #1 の指摘には同意. とはいえ, 世の中には「ものを知らない人間から渡される」こともあるから, 必ずしも質問者自身の責任とは言えない.
さておき,
1. 行ごとに split して見出し (教科) とそれ以外のハッシュに分離
2. ハッシュをのキーを点数でソート
3. ソートした順に出力
かなぁ. うん, そんなに難しくもなさそう.
No.2
- 回答日時:
私はこういうの、データじゃなくて文字の羅列と呼んでいます。
正規化したら、表計算ソフトで並び替えや各種計算が自由自在に・・・
まぁ期せずしてクソデータを処理せねばならぬ不幸の身になったのでしたら、
一旦splitで配列に放り込んだ後、二次元ハッシュで
$hash{教科}{名前} = 点数;
のようにするしかないでしょう。
No.1
- 回答日時:
まず、データの作り方自体から間違っています。
そういうデータ構造にすると後でものすごく苦労する。
1行の中にクラス全員の名前と点数を入れるなんてデータ構造的に不合格。最適化が全くなされていない、時間ばかりかかって益が少ない構造です。
もっとも一般的なデータ構造は
・教科ごとにテーブル(CSVファイル)を分ける
・1レコードには氏名(クラスと出席番号で識別できるようになっていると更に良い)と点数のみ
というのが基本。
こういうデータ構造にしておけば一番単純なソート方法ですぐに解決する。Perlならソート自体は1行で済みます。
そのデータをなんとかして利用する方法を考えるより、データを作りなおしたほうが早いと思います。
そうすればPerlを使わなくてもExcelのソート操作で簡単に並べ替えられるしね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 野球 WBC 1 2023/03/07 15:26
- 野球 この中で1番凄いのはどれ? 5 2022/12/31 17:30
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- 野球 世界一ですか 4 2022/11/11 06:17
- 野球 WBC 1 2023/03/07 15:56
- 野球 日本代表 これで世界一ですか 2 2022/11/11 05:59
- 野球 世界一ですか 2 2022/11/11 06:15
- 野球 オールスターゲーム セ・リーグ 1 2022/06/07 23:46
- C言語・C++・C# c言語の問題です 2 2023/07/21 10:51
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハッシュ検索はなぜ速い
-
ハッシュのキーを変数で
-
文字列を変数名として扱う方法
-
ハッシュマーク以降のアドレス取得
-
動的なハッシュの配列を作成したい
-
まったく同じファイルのハッシ...
-
Perlのサブルーチンの引数に配...
-
ハッシュ値が一致したデータは...
-
チェックデジットについて
-
*(アスタリスク)の意味
-
ハッシュ法でのデータ管理につ...
-
短いハッシュの作り方
-
一意(ユニーク)かつ、ソート...
-
UWSCの終了の仕方
-
Escキーを押すと、中断する時と...
-
VBAのautofilter、criteriaの配...
-
VBのReturnの使い方
-
範囲指定したセルを1つずつ飛...
-
エクセルの当番表を作っていま...
-
画面を強制的に再描画させる方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックデジットについて
-
ハッシュ検索はなぜ速い
-
文字列を変数名として扱う方法
-
短いハッシュの作り方
-
列挙型と連想配列の違いを教え...
-
ハッシュ値によるファイルの同...
-
英語でのシャープとコメの呼び...
-
まったく同じファイルのハッシ...
-
ハッシュ値が一致したデータは...
-
一意(ユニーク)かつ、ソート...
-
ハッシュリストって単にハッシ...
-
ハッシュのハッシュを実現したい。
-
Perlのサブルーチンの引数に配...
-
重複ファイルを削除したいので...
-
ハッシュマーク以降のアドレス取得
-
perl 文字列検索後に指定フィー...
-
Perlは戻り値で、ハッシュや配...
-
SSLとMD5について
-
ハッシュ法でのデータ管理につ...
-
ハッシュの考え方、使用例を分...
おすすめ情報