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{$_}++, @_;
}

함수 설명

  1. %seen: 이 해시는 요소를 키로 저장합니다. Perl의 해시는 유일한 키만 허용하므로 중복을 추적하는 데 적합합니다.

  2. 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 함수는 중복을 효율적으로 처리합니다. 사용하려면:

  1. Perl 버전이 최신인지 확인합니다.
  2. 모듈이 설치되어 있는지 확인합니다(필요한 경우).
  3. 배열에 대해 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::uniqundef를 별도의 값으로 처리합니다.
  • 경고 없음: 이 방법은 중복 값과 관련된 경고를 발생시키지 않습니다.

결론

Perl에서 배열에서 중복 항목을 제거하는 것은 커스텀 함수 또는 내장 기능을 활용하여 효과적으로 수행할 수 있습니다, 특히 List::Util을 사용하면 더욱 그렇습니다. 어떤 방법을 선택하든 배열 정리가 간단하고 효율적이게 이루어질 수 있습니다. 이제 자신감을 가지고 배열을 다룰 수 있습니다!

이 기술들을 Perl 프로젝트에서 연습하여 실력을 향상시키세요!