2010-06-13 1 views
1

이전 질문 (found here)과 관련하여 1 차원이 아닌 2 차원 배열로 주어진 답을 구현할 수 있기를 원합니다.2d 배열의 키/문자열을 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

'Simplest'는 둘 이상의 것을 의미하는 것으로 이해 될 수 있습니다. 가독성을 의미합니까? – Zaid

답변

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' 

이 방법의 장점은 소니와 HP는 지금까지 카메라에 협력하기로 결심했다면, 코드 모두를 반환 할 수 있도록이 여러 일치의 가능성을 다루고 있다는 것입니다! (13 25)

+0

나는 첫 번째 경기 만 필요로하는 비슷한 일을한다 (일단 경기가 발견되면 더 이상 검색을 멈춰야한다). 이 경우 어떻게 코드를 수정해야합니까? –

+0

@ ΩmegaΔ :'my ($ first) = map ...;' – Zaid