في كثير من الأحيان عند كتابة نصوص برمجة باويرشيل، تحتاج إلى طريقة لتخزين مجموعة من العناصر. واحدة من الطرق الشائعة لتحقيق ذلك هي باستخدام مصفوفة أو نوع محدد يعرف بـ ArrayList. ولكن ما هي المصفوفة على أي حال؟ المصفوفة هي هيكل بيانات تم تصميمه لتخزين مجموعة من العناصر. يمكن أن تشمل هذه العناصر أنواعًا متماثلة أو مختلفة.
تستخدم المصفوفات في العديد من لغات البرمجة المختلفة وباويرشيل ليست استثناءً. هناك العديد من الطرق لإنشاء وتلاعب وتحسين المصفوفات. في هذه المقالة ستتعرف على ArrayLists والمصفوفات والمجموعات بالإضافة إلى بعض الممارسات الجيدة عند تطبيقها باستخدام باويرشيل.
المتطلبات المسبقة / المتطلبات
نظرًا لأنك ستعمل فقط مع لغة باويرشيل نفسها، لا توجد متطلبات بيئية. ما عليك سوى أن يكون لديك جهاز كمبيوتر يعمل بنظام التشغيل ويندوز مع باويرشيل. على وجه التحديد:
- PowerShell لنظام التشغيل ويندوز 3 أو أحدث
- .NET Framework 4.5 أو أحدث
هل ترغب في المزيد من النصائح مثل هذه؟ تحقق من مدونتي الشخصية لـ باويرشيل على العنوان: https://nkasco.com/FriendsOfATA
إنشاء مصفوفات باستخدام باويرشيل
هناك العديد من الطرق المختلفة لإنشاء مصفوفات باستخدام باويرشيل. لنفترض أن لديك قائمة من الأسماء التي تحتاج إلى معالجتها بطريقة ما كما هو مبين أدناه.
بناء المصفوفات عن طريق عناصر منفصلة بفواصل
أبسط طريقة يمكنك استخدامها لإنشاء مصفوفة هي ببساطة تعيين الإدخالات المعروفة المفصولة بفواصل إلى متغير كما هو مبين أدناه.
إذا قمت بتشغيل الأمر GetType()
المتاح على جميع الكائنات في PowerShell، سترى أنك قد قمت بإنشاء مصفوفة بنجاح كما يظهر في خاصية BaseType
الموضحة أدناه.
استخدام مشغل العبارات الفرعية
يمكنك أيضًا إنشاء مصفوفات في PowerShell عبر مشغل العبارات الفرعية. يتم استخدام هذا المفهوم عادةً عند عدم معرفتك بعدد العناصر التي سيتم إضافتها إلى مصفوفتك. يمكن أن يحتوي النتيجة على صفر أو العديد من العناصر عند الإنشاء.
لاحظ أدناه أن مصفوفة تسمى $MyArray
قد تم إنشاؤها بصفر عناصر داخلها.
استخدام مشغل النطاق
ليست المصفوفات مقتصرة على تخزين السلاسل كما هو موضح أعلاه. يمكنك أيضًا إنشاء مصفوفات باستخدام أنواع كائنات أخرى مثل الأعداد الصحيحة.
إذا كنت بحاجة إلى مصفوفة من الأعداد الصحيحة بترتيب تسلسلي، يمكنك اتخاذ اختصار واستخدام مشغل النطاق ..
. أدناه يمكنك رؤية مصفوفة تم إنشاؤها باستخدام الأعداد الصحيحة من 2 إلى 5 بسطر واحد من الشيفرة.
إنشاء مجموعات ArrayList في PowerShell
يعد استخدام ArrayList في PowerShell أيضًا وسيلة يمكنك من خلالها تخزين قائمة من العناصر في PowerShell. فئة ArrayList هي جزء من فضاء أسماء System.Collections ضمن .NET. من خلال إنشاء كائن جديد من هذا النوع، يمكنك ثم تخزين الكائنات داخل ArrayList.
يمكنك رؤية أدناه أنه يتعين عليك إنشاء كائن ArrayList بشكل صريح باستخدام cmdlet New-Object
أو عن طريق تحويل مصفوفة قياسية إلى كائن ArrayList.
تحتمل أن يكون BaseType
في هذه الحالة كائنًا بينما الأمثلة أعلاه لديها BaseTypes من Arrays والتي تظهر الوراثة من فئة Object. في النهاية، تقدم PowerShell وصولاً إلى نظام النوع .NET.
إضافة العناصر إلى مصفوفة
عند إنشاء مصفوفة، يمكنك إما تعريف جميع العناصر في وقت الإنشاء أو إضافتها حسب الحاجة.
لإضافة عناصر إلى مجموعة موجودة، يمكنك استخدام مشغل +=
أو طريقة Add
. ولكن اعلم أن هناك فروقًا كبيرة في كيفية عملها.
عند إنشاء مصفوفة قياسية بـ @()
، ستستخدم مشغل +=
ولكن لإضافة عناصر إلى ArrayList، ستستخدم طريقة Add
. تختلف هذه الطرق في أن مشغل +=
في الواقع يدمر المصفوفة الحالية ويقوم بإنشاء واحدة جديدة مع العنصر الجديد.
لتوضيح ذلك، سترى أدناه يمكنك الرجوع إلى خاصية IsFixedSize
لمصفوفة أو ArrayList لمعرفة ما إذا كانت لا تتغير أم تتغير.
نظرًا لأن المصفوفة الأساسية هي مجموعة ذات حجم ثابت، فلا يمكنك تعديلها.
محاولة استخدام الطريقة Add()
مع مصفوفة ذات حجم ثابت ستؤدي إلى حدوث خطأ بسبب الحجم الثابت. فيما يلي بعض الأمثلة التي يمكنك فيها إضافة عناصر بنجاح إلى مصفوفة.
إزالة العناصر من مصفوفة
الآن بعد أن لديك فهمًا أفضل لكيفية إضافة العناصر إلى مصفوفة، دعنا نغطي بعض الطرق التي يمكنك من خلالها إزالة العناصر من مصفوفة.
نظرًا لأن المصفوفة الأساسية ثابتة، فلا يمكنك إزالة العناصر منها. بدلاً من ذلك، عليك إنشاء مصفوفة جديدة تمامًا. على سبيل المثال، يمكنك إزالة عنصر واحد من مصفوفة عن طريق إنشاء عبارة شرطية تطابق فقط تلك العناصر التي ترغب في تضمينها. يُظهر المثال أدناه.
نظرًا لأن ArrayList ليست ثابتة، يمكنك إزالة العناصر منها باستخدام الطريقة Remove()
. هذا هو سيناريو واحد يمكن أن يفيدك في استخدام ArrayList إذا كنت تخطط لإضافة/إزالة العناصر بشكل متكرر.
استرجاع عناصر محددة من مصفوفة أو ArrayList
لاسترجاع عناصر محددة من مصفوفة أو ArrayList، يمكنك استخدام العديد من الطرق المختلفة. مثل أشياء أخرى في PowerShell، يمكنك الوصول إلى جميع عناصر المصفوفة ببساطة عن طريق استدعاء الكائن.
ربما تحتاج إلى استرجاع العنصر الأول فقط، حيث تحتوي المصفوفات دائمًا على مصدر يبدأ من 0 يمثل العنصر الأول في المصفوفة. لاسترجاع العنصر الأول من مصفوفة، حدد رقم المؤشر في الأقواس كما هو موضح أدناه.
بالعكس ، يمكنك أيضًا الإشارة إلى الفهارس بشكل عكسي باستخدام علامة الشرطة (مؤشر سلبي) لاستدعاء آخر عدد X من العناصر من المصفوفة. الطريقة الشائعة للعثور على العنصر الأخير في مصفوفة هي باستخدام -1
كما هو موضح أدناه.
يمكن استخدام مشغل النطاق الذي تعلمته أعلاه أيضًا لاسترداد كائنات من مصفوفة عن طريق اتباع نفس الطريقة لاستدعاء العناصر. لنفترض أنك تريد استرداد الأسماء الأربع الأولى في مصفوفة $BasicArray
.
يمكنك أن ترى أدناه يمكنك تحديد نطاق من الفهارس 0-3 الذي سيعيد العناصر الأربعة الأولى.
تحسين المصفوفات باستخدام PowerShell
الآن بعد أن لديك أساس جيد لكيفية إنشاء وتلاعب المصفوفات ، أيهما يجب عليك استخدامه؟ للإجابة على ذلك ، دعونا نمر ببعض الأمثلة مع Measure-Command
cmdlet. باستخدام cmdlet Measure-Command
، ستفهم بشكل أفضل كم من الوقت يستغرق المراحل بينما يتم تمرير العناصر.
بشكل عام ، إذا كان لديك مجموعة صغيرة من الكائنات ، فمن المحتمل أنك لن تلاحظ الفرق كثيرًا في كيفية تلاعبك بالمصفوفات. ومع ذلك ، إذا كان لديك مجموعة كبيرة من الكائنات ، من المهم فهم الاختلافات لتحقيق النتائج المثلى.
لنقم بتطبيق ما تعلمته للتو في القسم السابق حول الفرق بين +=
واستخدام الطريقة Add()
مع حلقة من 50،000 عنصر.
أولاً، قم بإنشاء مصفوفة فارغة و ArrayList فارغة كما هو موضح أدناه.
بعد ذلك، قم بملء 50,000 عنصر في كل مجموعة باستخدام مشغل المدى وحلقة foreach كما هو موضح أدناه.
وأخيرًا، قم بتغليف الأوامر الخاصة بك في تعبير وقم بتمرير هذا التعبير إلى cmdlet Measure-Command. عن طريق تنفيذ التعبير باستخدام cmdlet Measure-Command، يمكنك رؤية كم يستغرق كل عملية فعليًا للتنفيذ.
تذكر أنه كما تعلمت من قبل، + = ينشئ في الواقع مصفوفة جديدة بدلاً من إلحاقها بمصفوفة ثابتة.
النتيجة؟ ما يقرب من 60 ثانية مقابل 139 مللي ثانية!
كما يمكنك رؤية، فإنه من الأسرع بكثير استغلال ArrayList لمجموعات كبيرة بدلاً من استخدام مصفوفة ذات حجم ثابت.
على الرغم من أن هذا مثال بسيط، إلا أنه يشدد على أهمية فهم ما يقوم به كودك أثناء المعالجة. إذا لم يتم فهمه بشكل صحيح، يمكن أن يؤدي ذلك إلى تجربة مستخدم سيئة.
إذا كان لديك أي سيناريو قائم يمكن أن يستفيد من استخدام ArrayList بدلاً من مصفوفة، فهذا سيمثل فرصة رائعة لإجراء تحسين على مدار الليل!
Further Reading
ترغب في المزيد من النصائح مثل هذه؟ تحقق من مدونتي الشخصية حول PowerShell على: https://nkasco.com/FriendsOfATA.