القوائم والمصفوفات

ولا بد من المزيد من الميزات القليلة للبيرل يمكن تغطيتها من قبل أي برامج أكثر إثارة للاهتمام يمكن ان تكون مكتوبة. أولا ، نحن بحاجة بيرل 'القوائم' (أو 'صفائف'). قائمة بيرل هو مثل الطبقة الحيوية في مجموعة سي + + أو جافا (java.util.Vector على سبيل المثال). قوائم لا تستخدم بيرل كائن لغوي ، وإنما هي قائمة أساسا كائن التي تملك بيانات والتي لديها مجموعة من المهام المرتبطة بها. قائمة بيرل :

  

وتمتلك مجموعة من عناصر البيانات (عادة القيم العددية ، ولكن يمكنك بناء قوائم القوائم وغيرها من الهياكل الأكثر تعقيدا على النحو الموضح في perldsc. هل (موافق ، 'لم تفعل لأنها' ، وهذه ليست وظائف الأعضاء من الدرجة) :

-- إنشاء قائمة ، وعادة ما تهيئة عليه مع غير فارغة مجموعة من عناصر البيانات (على الرغم من قوائم فارغة على ما يرام).

-- إضافة عناصر 'في الجبهة' أو 'في نهاية' من القائمة.

-- إزالة العناصر 'في الجبهة' أو 'في نهاية' للقوائم.

-- العناصر الوصول الى مواقف معينة (وهذا يعطيه ميزة 'array' تشبه السلوكيات وكذلك السلوكيات القائمة).

-- عودة حجم مجموعتها (طول صفيف الحيوية).

-- نسخ إلى طائفة أخرى.

الوظائف الأخرى ذات الصلة إلى قوائم تشمل الوظائف للفرز القوائم والعودة نسخا من قوائم مع عناصر من أجل عكسه.

قوائم مخصصة باستخدام تصفيات اكتب '@'. أسمائها متابعة الاتفاقيات المعتادة

-- الرسالة تليها هجائيات عددية (وبعض الشخصيات الاخرى في أسماء خاصة للقوائم المقدمة في صميم بيرل). عند تشكيل الأسماء ، وبيرل تعتبر حرف تسطير رسالة. قائمة أسماء الصالحة هي :

@ @ قائمتي نتائج inputlines @ @ @ _DATA list_1

بيرل تحتفظ بمساحات 'متميزة' لمفردة مختلفة ، وبعثرة قائمة أنواع البيانات (وأنواع أخرى مثل 'المقابض الملف'). يمكنك الحصول على $ عددي النتائج وقائمة @ النتائج دون أن تسبب أي التباس بيرل (وإن كنت قد يخل اي خبرة صيانة مبرمج لديه للنظر بعد الشفرة).

حرفيان قائمة معتمدة : (1 ، 2 ، 3) ( "توم" ، "ديك" ، "هاري" ، "سو") ($ الاسم ، العنوان $ ، $ بلدة)

قائمة الحرفية وغالبا ما تستخدم لتهيئة صفائف. استخدام آخر لديه قائمة الحرفي باعتباره 'lvalue' (شيء ما على الجانب الأيسر من عبارة الاحالة). هذا الاستخدام سوف يتضح لاحقا ، بل هو ميزة الراحة المتصلة استخراج عناصر محددة من قائمة موجودة. بعض الأمثلة من الحرفية القائمة المستخدمة في قائمة / إنشاء مجموعة هي :

@ PlacesIveBeen = () ؛ # لقد كنت في أي مكان حتى الآن -- والأمر كذلك ، قائمة فارغة GradePts @ = (45 ، 50 ، 65 ، 75 ، 85) ؛ مدن @ = ( "لندن" ، "باريس" ، "نيويورك" ، "روما" ، "طوكيو" ، "سيدني") ؛ الناس @ = ( "توم" ، "ديك" ، "هاري" ، "سو") ؛ TeenYears @ = (13.. 19) ؛

وكان آخر هذه يوضح بيرل '..' مشغل المدى. هذا هو الطريق القصير لتحديد وجمع (13 ، 14 ، 15 ، 16 ، 17 ، 18 ، 19). ويمكن أن تتراوح مشغلي يمكن استخدامها في 'foreach' تكرارية بنيات -- ل(1.. 100) ؛ حلقات foreach يتم شرحه لاحقا في هذه المقالة. وبما أنه من الشائع أن الحاجة إلى تهيئة قائمة من الكلمات ، وبيرل لديه وظيفة مساعد qw () وهكذا ، يمكن أن يكون لديك :

@ الناس = qw (توم ديك هاري مقاضاة) ؛

وqw () وظيفة ليست دائما ملائمة. استخدام التالية :

@ المدن = qw (لندن باريس 'نيويورك' روما طوكيو سيدني) ؛

النتائج في قائمة مثل : (لندن ، باريس ، 'نيو يورك' وروما وطوكيو وسيدني) الذي هو على الارجح وليس ما هو مقصود منها. وفيما يلي يوضح جزء التعليمات البرمجية في إنشاء واستخدام بعض القوائم. الحلقات توضيح الطرق المختلفة للوصول إلى قائمة العناصر :

@ Cities1 = ( "لندن" ، "باريس" ، "نيويورك") ؛ # قائمة مع 3 عناصر @ Cities2 = qw (روما 'لوس أنجلوس' "سان فرانسيسكو") ؛ # 5 عناصر! @ Cities3 = ( "اجا "،" هاي "،" Cooma ") ؛ # مثل ف ف () وف () ، qw () يسمح المحددات الأخرى : @ Cities4 = qw \ Thiroul Bellambi Keiraville \ ؛ الطباعة" Cities1 : \ ن "؛ $ حجم = @ Cities1 ؛ للدولار (ط = 0 ؛ دولار ط <$ حجم ؛ ط دولار + +) ($ الطباعة Cities1 [$ ط] ، "\ ن" ؛) الطباعة "Cities1 : \ ن" ؛ foreach $ مدينة (@ Cities2) (الطباعة $ المدينة ، "\ ن" ؛) الطباعة "Cities3 : \ ن" ؛ foreach ط دولار (0.. $ # Cities3) ($ الطباعة Cities3 [$ ط] ، "\ ن" ؛) الطباعة "Cities4 : @ Cities4 \ ن "؛ طباعة Cities4 @ ؛

حجم الخط $ = @ Cities1 ؛ يوضح استخدام صفيف في 'سياق مفردة' ؛ بيرل يفسر هذا على أنه طلب من طول الصفيف ؛ حتى $ حجم يأخذ القيمة 3. في أول لحلقة هي حلقة العد التقليدية ، مع ارتفاع مؤشر الرقم القياسي لحلقة المستخدمة في جمع Cities1 @. لاحظ استخدام $ المدن [$ ط] ؛ نوع البيانات هنا هو مفردة -- نحن استخراج عنصر بيانات واحد من موقع محدد في جمع ، والثانية والثالثة لحلقات هي أمثلة على بيرل حلقة foreach بناء. هذه الحلقات يكون على شكل :

foreach  (قائمة) كتلة foreach (قائمة) كتلة

(الكلمة formay استخدامها بدلا من foreach ، ولكن foreach هو أكثر قابلية للقراءة.) عادة ما تريد متغير أن الإشارات العنصر الحالي من القائمة ، ولكن هذا ليس ضروريا ، والأولى من حلقات foreach في رمز المثال يصل ببساطة كل من (خمسة!) عناصر في $ Cities2 ، وطباعة اسم كل بدوره. والثاني هو أشبه عد للحلقة ، والتعبير $ # Cities3 إرجاع (العددية) قيمة المؤشر في العنصر الأخير من القائمة @ Cities3. وبالتالي ، هذا هو في الواقع حلقة foreach ط دولار (0 ، 1 ، 2) (... ) ، وهذه حلقة أخرى يستخدم أسلوب فهرسة مجموعة لاستخراج عناصر البيانات من القائمة. وأخيرا ، فإن قائمة $ Cities4 طبعت مرتين. طباعة أول بيان له قائمة في سلسلة متشابكة ؛ طباعة هذه العناصر مفصولة بمسافات. ويمكن طباعة النتائج النهائية في بيان تمشيا مع جميع عناصر بيانات متسلسلة في سلسلة واحدة طويلة (ليست مفيدة بشكل خاص شكل الإخراج ، فقط ميزة أخرى للنظام بيرل). قوائم يكون متصلا معا :

@ ذكر = qw (ميكي دونالد) ؛ انثى @ = qw (ميني ديزي) ؛ DisneyMob = @ (@ ذكر ، انثى @ "بلوتو") ؛

هذا وتنتج واحدة على مستوى قائمة (لا اللثغة مثل قائمة من القوائم) :

ميكي ودونالد ، ميني ، ديزي ، بلوتو صالحة يمكن ان تكون 'شرائح' لإعطاء subarrays : @ خط = qw (واحد اثنان ثلاثة أربعة) ؛ firsttwo = @ @ خط [0،1] ؛ @ خط [0،1] = ( "خمسة" ، "ستة") ؛

أو يمكن أن يكون دفع القيم وبرزت :

@ مكدس = () ؛ دفع (@ مكدس ، "واحد") ؛ دفع (@ المكدس "، وهما") ؛ دفع (@ مكدس ، 3 ، 4) ؛ دفع (@ مكدس ، 5 ، 6 ، 7 ، 8 ، " تسعة "، 101) ؛ الطباعة @ المكدس" \ ن "؛ $ فال = البوب (@ المكدس) ؛ الطباعة" كومة @ \ ن "؛

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

@ = عكس newRevList (@ aList) ؛ @ list1 = qw (وهذا هو الاختبار ماذا العالمي مرحبا مرحبا أمي الخ الخ) ؛ # المطبوعات على النحو التالي : List1 : هذا هو اختبار ماذا العالمي مرحبا مرحبا أمي الخ الخ # Peform النوع ، ثم طباعة فرز قائمة ؛ حالة الأحرف # رتبة أقل من الأحرف الصغيرة... مصنفة : مرحبا مرحبا هذا العالم الخ الخ آخر هو أمي اختبار ما # بعض البيانات الرقمية @ list2 = (100 ، 26 ، 3 ، 49 ، -11 ، 3001 ، 78) ؛
# مصنفة! (مرتبة أبجديا) مصنفة : -11 100 26 3 3001 49 78

الافتراضي النوع من السلوك أبجدية الفرز يمكن تعديلها ؛ لديك لتوفير الخاصة بك نوع المساعد روتين. وظائف المساعد للفرز هي شاذة القليل من المعرفة الروتينية ، لكنهم ليسوا من الصعب الكتابة. روتينك سوف يتم استدعاؤها للعودة نتيجة لعملية المقارنة على عنصرين من مجموعة -- هذه العناصر سيكون قد تم وضعها في ظل المتغيرات العالمية دولار ، ومبلغ (ب) قبل الدعوة إلى روتين الخاص بك. (وهذا الاستخدام للمتغيرات عالمية محددة هو ما يجعل هذه الوظائف الفرعية نوع مختلف من مبرمج غيرها من إجراءات محددة.) يوضح التعليمة البرمجية التالية لتعريف واستخدام نصيرا فرز روتين 'numeric_sort'.

#! / مشاركة / بن / بيرل - ث الفرعية numeric_sort (إذا دولار (أ <$ ب) (عودة -1 ؛) elsif (دولار == $ ب) (عودة 0 ؛) والا (العودة 1 ؛)) @ list2 = (100 ، 26 ، 3 ، 49 ، -11 ، 3001 ، 78) ؛ @ @ slist2 = فرز list2 ؛ الطباعة "List2 @ list2 \ ن" ؛ الطباعة "مصنفة List2 (الفرز الافتراضي) @ slist2 \ ن" ؛ @ nlist2 = فرز numeric_sort @ list2 ؛ الطباعة "مصنفة List2 (النوع رقمي) @ nlist2 \ ن" ؛

بيرل لديه خاصة <=> مشغل للمقارنات رقمية ؛ باستخدام هذا المشغل ، يمكن تبسيط رقمية نوع الدالة يكون :

دون numeric_sort (@ أ <=> $ ب)

بيرل تصاريح في سطر تعريف وظائف المساعد الفرز ، والسماح بتشييد مثل :

@ nlist2 = (فرز دولار <=> $ ب) @ list2 ؛
مقال مقدم من سارة ميلر


تنويه :موقعنا على الانترنت ليست مسؤولة عن محتوى هذه المادة. Webarticles هو حر للمعلومات.
المهم : هذه المادة "، وقوائم المصفوفات" وقد ترجم من قبل البرمجيات التلقائي. نشعر بالاسف من اجل أي الأخطاء الإملائية التي قد حدث. شكرا لتفهمكم.


Online: 383 users browsing the articles directory