GoogleSearch
이 블로그 검색
Perl: my cookbook
라벨:
Informatics
이메일로 전송BlogThis!X에 공유Facebook에서 공유
Table of Content
- Installation
- Sort and get unique array elements
## Installation
perl -MCPAN -e 'install HTML::Template'
## Sort and get unuq array elements
SOURCE: http://docstore.mik.ua/orelly/perl/cookbook/ch04_07.htm
Straightforward: The question at the heart of the matter is "Have I seen this element before?" Hashes are ideally suited to such lookups. The first technique ( "Straightforward ") builds up the array of unique values as we go along, using a hash to record whether something is already in the array.
%seen = ();
@uniq = ();
foreach $item (@list) {
unless ($seen{$item}) {
# if we get here, we have not seen it before
$seen{$item} = 1;
push(@uniq, $item);
}
}
Faster: The second technique ( "Faster ") is the most natural way to write this sort of thing in Perl. It creates a new entry in the hash every time it sees an element that hasn't been seen before, using the ++ operator. This has the side effect of making the hash record the number of times the element was seen. This time we only use the hash for its property of working like a set.
%seen = ();
foreach $item (@list) {
push(@uniq, $item) unless $seen{$item}++;
}
The third example ( "Similar but with user function ") is similar to the second but rather than storing the item away, we call some user-defined function with that item as its argument. If that's all we're doing, keeping a spare array of those unique values is unnecessary.
%seen = ();
foreach $item (@list) {
some_func($item) unless $seen{$item}++;
}
Faster but different: The next mechanism ( "Faster but different ") waits until it's done processing the list to extract the unique keys from the %seen hash. This may be convenient, but the original order has been lost.
%seen = ();
foreach $item (@list) {
$seen{$item}++;
}
@uniq = keys %seen;
Faster and even more different: The final approach, ( "Faster and even more different ") merges the construction of the %seen hash with the extraction of unique elements. This preserves the original order of elements.
%seen = ();
@uniqu = grep { ! $seen{$_} ++ } @list;
이메일로 전송BlogThis!X에 공유Facebook에서 공유
라벨:
Informatics
- Installation
- Sort and get unique array elements
perl -MCPAN -e 'install HTML::Template'
Scientist. Husband. Daddy. --- TOLLE. LEGE
외부자료의 인용에 있어 대한민국 저작권법(28조)과 U.S. Copyright Act (17 USC. §107)에 정의된 "저작권물의 공정한 이용원칙 | the U.S. fair use doctrine" 을 따릅니다. 저작권(© 최광민)이 명시된 모든 글과 번역문들에 대해 (1) 복제-배포, (2) 임의수정 및 자의적 본문 발췌, (3) 무단배포를 위한 화면캡처를 금하며, (4) 인용 시 URL 주소 만을 사용할 수 있습니다. [후원 | 운영] [대문으로] [방명록] [옛 방명록] [티스토리 (백업)] [신시내티]
-