"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكن إزالة النظراء المكررين بكفاءة من شريحة ما في Go؟

كيف يمكن إزالة النظراء المكررين بكفاءة من شريحة ما في Go؟

تم النشر بتاريخ 2024-11-17
تصفح:369

How to Efficiently Remove Duplicate Peers from a Slice in Go?

إزالة العناصر المكررة من شريحة

إعطاء ملف نصي يحتوي على قائمة من الأقران الممثلة ككائنات مع "العنوان" و"معرف النظير" السمات، تتمثل المهمة في إزالة جميع الأقران المكررة بناءً على مطابقة "العنوان" و"معرف النظير" من شريحة "Bootstrap" في تكوين الكود.

لتحقيق ذلك، نقوم بالتكرار عبر كل كائن نظير في الشريحة عدة مرات. أثناء كل تكرار، نقوم بمقارنة "معرف النظير" و"العنوان" مع القيم التي يوفرها المستخدم. إذا تم العثور على تطابق، فإننا نزيل هذا الكائن المحدد من الشريحة. تضمن هذه العملية إزالة كافة مثيلات النظير.

ومع ذلك، هناك حالة حافة يجب أخذها في الاعتبار. إذا كان النظير الأخير في شريحة "Bootstrap" مكررًا، فسوف يصاب الكود بالذعر بسبب خطأ "حدود الشريحة خارج النطاق". لمعالجة هذه المشكلة، يمكننا تنفيذ حل أكثر قوة يقوم بنسخ القيم غير المطابقة إلى بداية الشريحة وتقليص الفائض عند اكتمال التكرار.

إليك الكود المحدث:

i := 0
for _, v := range cfg.Bootstrap {
   if v.PeerId == peer.PeerId && v.Address == peer.Address {
      continue
   }
   cfg.Bootstrap[i] = v
   i  
}
cfg.Bootstrap = cfg.Bootstrap[:i]

يتكرر هذا الرمز من خلال شريحة "Bootstrap". بالنسبة لكل كائن نظير، فإنه يقارن "معرف النظير" و"العنوان" الخاص به بالقيم التي يوفرها المستخدم. إذا لم يكن النظير مكررًا، فسيتم نسخه إلى بداية الشريحة عند الفهرس "i." يتم بعد ذلك زيادة الفهرس "i" للإشارة إلى الموضع التالي المتاح.

بمجرد اكتمال التكرار، يتم قطع شريحة "Bootstrap" لإزالة أي عناصر زائدة، مما يؤدي بشكل فعال إلى إزالة جميع النظراء المكررة بما في ذلك الشريحة الأخيرة. .

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3