2010-06-13 40 views
1

与我以前的问题(found here)相关,我希望能够实现用2维数组给出的答案,而不是一维。最简单的方法来匹配键/字符串的二维数组在Perl中搜索?

Reference Array 
row[1][0]: 13, row[1][1]: Sony 
row[0][0]: 19, row[0][1]: Canon 
row[2][0]: 25, row[2][1]: HP 

Search String: Sony's Cyber-shot DSC-S600 
End Result: 13 
+2

'最简单'可以理解为意味着不止一件事。你的意思是可读性? – Zaid 2010-06-13 13:44:42

回答

3
use strict; 
use warnings; 

my @array = (
       [ 19, 'Canon' ], 
       [ 13, 'Sony' ], 
       [ 25, 'HP' ], 
      ); 

my $searchString = "Sony's Cyber-shot DSC-S600"; 

my @result = map { $array[$_][0] }      # Get the 0th column... 
       grep { $searchString =~ /$array[$_][1]/ } # ... of rows where the 
       0 .. $#array;       #  first row matches 

print "@result"; # prints '13' 

这种方法的优点在于它有多个匹配的可能性交易,所以如果索尼和惠普曾经决定在相机上进行合作,你的代码可以同时返回! (13 25

+0

我有一个类似的任务,只需要第一次匹配(一旦找到匹配,它应该停止进一步搜索)。在这种情况下你的代码如何修改? – 2013-12-03 22:38:03

+0

@ΩmegaΔ:'my($ first)= map ...;' – Zaid 2013-12-05 09:03:57