2012-08-17 19 views

Odpowiedz

14

Wystarczy użyć mapy, aby utworzyć listę następnie spadek w odniesieniu hash jak:

my $has_field = { map { $_ => 1 } @fields }; 
3

Update: Przepraszam, to nie robi rób dokładnie to, co chcesz, ponieważ najpierw musisz zadeklarować $ has_field.

Można użyć kawałek skrótu:

@{$has_field}{@fields} = (1)[email protected]; 

z prawej strony jest za pomocą operatora x powtórzyć jeden przez skalarne wartości @fields (to liczba elementów w tablicy). Inną opcją w tym samym duchu:

@{$has_field}{@fields} = map {1} @fields; 
+0

Działa to poprawnie, ale nadal wymaga deklarowania '$ has_field' osobno podczas używania' use strict; '. Wciąż jest to dobra sztuczka. –

2

Gdzie Przetestowałem to smart match może być od 2 do 5 razy szybciej niż tworzenie i testowanie hash odnośnika do wartości raz. Więc jeśli masz zamiar ponownego wykorzystania hash dużą liczbę razy, to najlepiej zrobić inteligentne dopasowanie:

if ($cand_field ~~ \@fields) { 
    do_with_field($cand_field); 
} 

To dobry jest, aby pamiętać, że od 5.10, Perl ma teraz drogę rodzimy do zapytaj "czy ta nieprzetestowana wartość jest jedną z tych znanych wartości", to jest inteligentny mecz.

+0

Dzięki za tę wspaniałą wskazówkę. Zdecydowanie zamierzam to wykorzystać. – dan1111

Powiązane problemy