2015-02-05 119 views
1

我在Perl編程中遇到了我的算法問題,我無法弄清楚如何管理。Perl算法比較陣列

我有一個數據庫在文本文件中有一些列和許多行。我已經可以讀取所有變量並將其保存到多維數組中。讓我們假定它是這樣

1. Jack A math 
2. John A+ math 
3. Jack B sports 
4. . 
5. . 
6. . 

你可以看到有四列(ID名年級課程)

現在的問題是,我想導出到一個新的文本文件同名的所有行。我已經有算法的想法,我可以檢查第一行,並將其與所有其他行進行比較,如果有相似性行將其導出,然後檢查第二行,並將其與下面所有其他行進行比較,並且是否存在相似性導出它等等。

這是我正在考慮的正確算法還是有其他算法來做到這一點?

如果您能給我一個代碼示例或我可以採取的任何其他步驟,我將不勝感激。

我想這個結果對於我的例子

1. Jack A for math, B in sports 
2. John A+ for math 
+0

你不想要一個數組,你想有一個哈希值。哈希是鍵值對。所以真的很好或者這樣的問題。 – Sobrique 2015-02-06 09:59:01

回答

0

我懷疑這是家庭作業,所以我會給你,你可以作爲提示用它來寫你自己的答案的解決方案。如果您在理解時遇到問題,請詢問。

use strict; 
use warnings; 

my %data; 

while (<DATA>) { 
    my ($id, $name, $grade, $lesson) = split; 
    push @{ $data{$name} }, [ $grade, $lesson ]; 
} 

my $n; 
for my $name (sort keys %data) { 
    my $grades = $data{$name}; 
    printf "%2d. %s %s\n", ++$n, $name, join ', ', map "$_->[0] in $_->[1]", @$grades; 
} 

__DATA__ 
1. Jack A math 
2. John A+ math 
3. Jack B sports 

輸出

1. Jack A in math, B in sports 
2. John A+ in math