2016-07-20 50 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

如果您使用第三列作爲每個密鑰的密鑰,那麼您可以設置一個Hash of Arrays來管理數據。首先在文件中加載並用逗號將字段拆分成數組。然後按鏈接文檔中「Generation of a 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

您可能想對輸出進行排序:'爲我的$ key(排序{$ a <=> $ b}鍵%結果)' – ysth

+0

謝謝。糾正我,如果我錯了,但不會排序只會重新排列數據。我們希望按類別設置結果類別。 – Efficasy

+0

@ysth是的,這是一個很好的觀點。如果是我的數據,我可能會按照您的建議進行排序,只是這樣我們就不會得到'3'在'2'之前打印的情況,這取決於如何訪問散列。我將使用該代碼改進進行編輯。 – drmrgd