-->

GoogleSearch



Scientist. Husband. Daddy. --- TOLLE. LEGE
외부자료의 인용에 있어 대한민국 저작권법(28조)과 U.S. Copyright Act (17 USC. §107)에 정의된 "저작권물의 공정한 이용원칙 | the U.S. fair use doctrine" 을 따릅니다. 저작권(© 최광민)이 명시된 모든 글과 번역문들에 대해 (1) 복제-배포, (2) 임의수정 및 자의적 본문 발췌, (3) 무단배포를 위한 화면캡처를 금하며, (4) 인용 시 URL 주소 만을 사용할 수 있습니다. [후원 | 운영] [대문으로] [방명록] [옛 방명록] [티스토리 (백업)]

이 블로그 검색

Perl: my cookbook

라벨:



Table of Content
  1. Installation
  2. 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;









라벨:





Scientist. Husband. Daddy. --- TOLLE. LEGE
외부자료의 인용에 있어 대한민국 저작권법(28조)과 U.S. Copyright Act (17 USC. §107)에 정의된 "저작권물의 공정한 이용원칙 | the U.S. fair use doctrine" 을 따릅니다. 저작권(© 최광민)이 명시된 모든 글과 번역문들에 대해 (1) 복제-배포, (2) 임의수정 및 자의적 본문 발췌, (3) 무단배포를 위한 화면캡처를 금하며, (4) 인용 시 URL 주소 만을 사용할 수 있습니다. [후원 | 운영] [대문으로] [방명록] [옛 방명록] [티스토리 (백업)] [신시내티]

-