현재 내가 사용 룩업 테이블 구축하고자 할 때 :선언하고 Perl로 한 번에 해시 테이블을 채우는
my $has_field = {};
map { $has_field->{$_} = 1 } @fields;
내가 한 단계에서 인라인 초기화를 할 수있는 방법이 있나요를? (즉, 내가 그것을 선언하고있어 같은 시간에 그것을 채울?)
현재 내가 사용 룩업 테이블 구축하고자 할 때 :선언하고 Perl로 한 번에 해시 테이블을 채우는
my $has_field = {};
map { $has_field->{$_} = 1 } @fields;
내가 한 단계에서 인라인 초기화를 할 수있는 방법이 있나요를? (즉, 내가 그것을 선언하고있어 같은 시간에 그것을 채울?)
그냥 다음과 같은 해시 참조로 드롭 목록을 만들려면지도를 사용
my $has_field = { map { $_ => 1 } @fields };
업데이트 : 죄송합니다, 이것은하지 않습니다 $ has_field를 먼저 선언해야하므로 정확히 원하는 것을 수행하십시오.
당신은 해시 조각을 사용할 수
@{$has_field}{@fields} = (1)[email protected];
오른편은 (배열의 요소, 즉 수) @fields의 스칼라 값을 반복 할 x
연산자를 사용한다. 같은 맥락에서 또 다른 옵션 :
@{$has_field}{@fields} = map {1} @fields;
. 당신이 해시에게 시간의 좋은 번호를 다시 사용하려고하지 않는 한 그래서, 스마트 일치 할 최선의 방법 :
if ($cand_field ~~ \@fields) {
do_with_field($cand_field);
}
그것은 5.10 이후, 펄 지금은 방법이 기억하는 좋은 일을 기본에 "이 값은 테스트되지 않은 값입니다."라고 물으면 스마트 일치입니다.
이 위대한 팁을 가져 주셔서 감사합니다. 확실히 사용하도록 할 것입니다. – dan1111
올바르게 작동하지만'use strict; '를 사용할 때'$ has_field'를 별도로 선언해야합니다. 그래도 여전히 좋은 트릭입니다. –