2016-07-20 26 views
-2

Perlデータ構造

私はPerlデータ構造に関する質問があります。

ファイル1.txtには、次のフィールドとデータがあります。

Student rollno class 
John,23,2 
Mike,25,2 
Ray,78,3 
Tim,30,3 
Mark,22,2 

あなたはPerlで出力を印刷することができますどのように助けてくださいことはできますか?

ファイルを分割して配列を取得していますが、結果セットにつまずいています。下のように出力を得る方法を教えてください。

2= john, mike, mark 
3= ray, tim 

結果セットを結合するデータ構造が必要です。

+1

どのようにこれまでに問題を解決しようとしましたか? –

+0

コードを表示しないとプログラムを修正するのは非常に難しいです。この宿題ですか? – Borodin

答えて

0

それぞれのキーとして3番目の列を使用している場合は、Hash of Arraysを設定してデータを管理できます。最初にファイルを読み込み、コンマでフィールドを配列に分割します。次に、リンクされたドキュメントの "配列のハッシュの生成"の例の28行で説明されているようにデータ構造を設定します。一度まとめておけば、リンクされている例のように、すべてを元に戻すだけで済みます。

その戦略の急ごしらえの例は、この(私はスクリプトの __DATA__セクション内のデータを持っているのではなく、ファイルから読み込むことに注意してください)のように見えるかもしれません

#!/usr/bin/perl 
use warnings; 
use strict; 

my %results; 
while (<DATA>) { 
    chomp; 
    my @elems = split(/,/, $_); 
    push(@{$results{$elems[2]}}, $elems[0]); 
} 

for my $key (sort { $a <=> $b } keys %results) 
    print "$key = "; 
    print join(', ', @{$results{$key}}), "\n"; 
} 

__DATA__ 
John,23,2 
Mike,25,2 
Ray,78,3 
Tim,30,3 
Mark,22,2 

出力は、このようなルックスを生成しました:

2 = John, Mike, Mark 
3 = Ray, Tim 
+0

あなたはおそらく、出力をソートしたいと思います。 'for my $ key(sort {$ a <=> $ b} keys%results)' – ysth

+0

ありがとう。私が間違っている場合は私を訂正してください。ソートはデータを再配置しません。私たちはクラスごとに結果セットでグループの種類が欲しいです。 – Efficasy

+0

@ysthええ、それは良い点です。それが私のデータだった場合は、提案したとおりにソートすることになります。ハッシュへのアクセス方法に応じて '3'が '2'の前に印刷されるという状況はありません。私はそのコードの改善で編集します。 – drmrgd