Perl에서 배열에서 중복 항목 제거하는 방법
프로그래밍에서 배열을 다루는 것은 종종 중복 값 처리라는 일반적인 문제로 이어집니다. 이 문제에 직면한 Perl 프로그래머라면, 배열에서 중복 항목을 효율적으로 제거하는 방법에 대해 확신이 서지 않을 수 있습니다.
이 블로그 포스트에서는 Perl에서 배열에서 중복을 제거하는 구체적인 기술을 살펴보며, 커스텀 솔루션과 함께 최신 버전의 Perl에서 사용 가능한 내장 함수도 살펴보겠습니다.
문제 이해하기
Perl에서 다음과 같은 배열이 있다고 가정해 봅시다:
my @my_array = ("one", "two", "three", "two", "three");
이 배열에서 “two"와 “three” 값이 여러 번 나타나 중복 제거의 대상이 됩니다. 여기서 목표는 이 배열을 고유한 목록으로 변환하여 중복을 제거하여 다음과 같은 결과를 얻는 것입니다:
one two three
솔루션: 커스텀 접근법
유니크 함수 만들기
중복 제거의 간단하고 효과적인 방법은 커스텀 함수를 만드는 것입니다. 아래는 사용할 수 있는 uniq
라는 이름의 함수입니다:
sub uniq {
my %seen;
grep !$seen{$_}++, @_;
}
함수 설명
-
%seen: 이 해시는 요소를 키로 저장합니다. Perl의 해시는 유일한 키만 허용하므로 중복을 추적하는 데 적합합니다.
-
grep: 이 함수는 목록을 반복하면서 조건을 평가합니다. 여기서
!$seen{$_}++
는 현재 항목($_
)이 이미 존재했는지(즉,%seen
에 존재하는지) 확인합니다. 존재하지 않으면 해시에 추가하고 true를 반환하여grep
이 이 항목을 출력에 포함하도록 합니다.
함수 적용하기
다음과 같이 배열에 함수를 적용할 수 있습니다:
my @array = qw(one two three two three);
my @filtered = uniq(@array);
print "@filtered\n"; # 출력: one two three
출력 테스트
이 코드를 실행하면 필터링된 배열이 다음과 같이 출력됩니다:
one two three
이는 중복이 성공적으로 제거되었음을 보여줍니다!
내장 함수 사용하기
Perl 5.26.0 이상의 버전을 사용하고 있다면, 더 보편적인 솔루션을 위해 내장 모듈을 활용할 수 있습니다:
List::Util 모듈
List::Util
모듈의 uniq
함수는 중복을 효율적으로 처리합니다. 사용하려면:
- Perl 버전이 최신인지 확인합니다.
- 모듈이 설치되어 있는지 확인합니다(필요한 경우).
- 배열에 대해
uniq
를 직접 사용합니다.
예시:
use List::Util 'uniq';
my @array = qw(one two three two three);
my @filtered = uniq(@array);
print "@filtered\n"; # 출력: one two three
내장 Uniq가 더 나은 이유는?
- 효율성: 내장 함수는 일반적으로 성능 최적화가 되어 있습니다.
- 정의되지 않은 값 처리:
List::Util::uniq
는undef
를 별도의 값으로 처리합니다. - 경고 없음: 이 방법은 중복 값과 관련된 경고를 발생시키지 않습니다.
결론
Perl에서 배열에서 중복 항목을 제거하는 것은 커스텀 함수 또는 내장 기능을 활용하여 효과적으로 수행할 수 있습니다, 특히 List::Util
을 사용하면 더욱 그렇습니다. 어떤 방법을 선택하든 배열 정리가 간단하고 효율적이게 이루어질 수 있습니다. 이제 자신감을 가지고 배열을 다룰 수 있습니다!
이 기술들을 Perl 프로젝트에서 연습하여 실력을 향상시키세요!