كيفية إزالة العناصر المكررة من مصفوفة في 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). إذا لم يكن قد تم رؤيته، يضيفه إلى الهاش ويعيد القيمة الصحيحة، مما يسمح لـ 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

دالة uniq من وحدة List::Util تتعامل مع التكرارات بكفاءة. لاستخدامها:

  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::uniq تعالج undef كقيمة منفصلة.
  • لا تحذيرات: هذه الطريقة لن تصدر تحذيرات تتعلق بالقيم المكررة.

الخاتمة

يمكن إزالة العناصر المكررة من مصفوفة في Perl بشكل فعال من خلال دالة مخصصة أو عن طريق الاستفادة من القدرات المدمجة، خاصة مع List::Util. أيًا كانت الطريقة التي تختارها، يمكنك التأكد من أن تنظيف مصفوفاتك سيكون بسيطًا وفعالًا. الآن يمكنك مواجهة المصفوفات بثقة!

مارس هذه التقنيات في مشاريع Perl الخاصة بك لتحسين مهاراتك!