Самый простой способ сопоставить 2d массив ключей / строк для поиска в Perl? - PullRequest
1 голос
/ 13 июня 2010

Относительно моего предыдущего вопроса ( найдено здесь ), я хочу иметь возможность реализовывать ответы, данные с помощью двумерного массива, а не одномерного.

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

1 Ответ

3 голосов
/ 13 июня 2010
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'

Прелесть этого подхода в том, что он имеет дело с возможностью нескольких совпадений, поэтому, если Sony и HP когда-либо решили совместно работать над камерой, ваш код может вернуть оба! (13 25)

...