الترتيب المخصص
جزء من قسم المنطق وتدفّق التنفيذ في رحلة GDScript على Coddy. الدرس 51 من 78.
ترتّب sort() المصفوفة تصاعديًا وتغيّر المصفوفة نفسها. تنتقل الأعداد من الأصغر إلى الأكبر، وتتبع السلاسل الترتيب نفسه المتّبع في min()، حيث تأتي الأحرف الكبيرة أولًا. ثم تعطي reverse() ترتيبًا تنازليًا:
var scores := [40, 95, 12, 70]
scores.sort()
print(scores) # [12, 40, 70, 95]
scores.reverse()
print(scores) # [95, 70, 40, 12]لأي ترتيب آخر، استدعِ sort_custom() باستخدام دالة مقارنة. تتلقى عنصرين، a وb، وتُرجع true عندما يجب أن يأتي a قبل b. مرّر الدالة باستخدام اسمها، دون أقواس:
func by_length(a: String, b: String) -> bool:
return a.length() < b.length()
func _ready():
var words := ["banana", "fig", "kiwi"]
words.sort_custom(by_length)
print(words) # ["fig", "kiwi", "banana"]يمكن للمقارنة أن تنظر داخل العناصر. هذا المثال يضع القاموس الذي يحتوي على أكبر قيمة "hp" أولًا:
func by_hp(a: Dictionary, b: Dictionary) -> bool:
return a["hp"] > b["hp"]الفرز غير مستقر: قد ينتهي الأمر بالعناصر التي تُقارَن على أنها متساوية بأي ترتيب. عندما يكون ترتيب العناصر المتساوية مهمًا، قارِن حقلًا ثانيًا عندما يكون الحقل الأول متساويًا:
func by_score_then_name(a: Dictionary, b: Dictionary) -> bool:
if a["score"] != b["score"]:
return a["score"] > b["score"]
return a["player"] < b["player"]توجد الدالة sort_custom() في Array، لكن ليس في PackedStringArray الذي تُعيده split()، لذا حوّله أولًا باستخدام Array(...). وستصادف أيضًا المقارنة المكتوبة مباشرةً، كما في sort_custom(func(a, b): return a > b). هذا الشكل هو دالة لامدا، وستتناولها في فصل الدوال المتقدمة.
التحدي
سهليقرأ البرنامج سطرين: أعدادًا صحيحة مفصولة بمسافات، وكلمات مفصولة بمسافات. يخزّنها الكود المعطى في numbers (مصفوفة من الأعداد الصحيحة) وwords (مصفوفة من السلاسل النصية).
- اكتب دالة مقارنة
by_length(a: String, b: String) -> boolفي المستوى الأعلى. تأتي الكلمة الأقصر أولًا، وتُرتَّب الكلمات ذات الطول نفسه أبجديًا. - اطبع أربعة أسطر: الأعداد بترتيب تصاعدي، والأعداد بترتيب تنازلي، والكلمات بترتيب أبجدي (باستخدام
sort())، والكلمات مرتبة باستخدامsort_custom(by_length).
للمدخلين 5 3 8 1 2 وelephant cat dolphin bee، يكون الناتج:
Ascending: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]
Alphabetical: ["bee", "cat", "dolphin", "elephant"]
By length: ["bee", "cat", "dolphin", "elephant"]جرّب بنفسك
extends Node
# اكتب دالة المقارنة by_length() هنا
func _ready():
var numbers: Array[int] = []
for text in OS.read_string_from_stdin().split(" ", false):
numbers.append(int(text))
var words := Array(OS.read_string_from_stdin().split(" ", false))
# رتّب المصفوفات واطبع الأسطر الأربعة
pass
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفّق التنفيذ
1السلاسل النصية بالتفصيل
أساليب السلاسل النصيةالبحث داخل السلاسل النصيةالاستبدال وإزالة المسافات الطرفيةالتقسيم والدمجمراجعة - التحقق من اسم المستخدم4القواميس، الجزء الثاني
القواميس المتداخلةمصفوفات من القواميسدمج القواميسنسخ القواميسمراجعة - عدّ التكرارات2اتخاذ القرارات المتقدم
المطابقة باستخدام المتغيراتشروط المطابقةأنماط المصفوفاتأنماط القواميسالتحقق من العضويةمراجعة - محلل الأوامر5تطبيق دفتر جهات الاتصال
عرض القائمةإضافة جهة اتصال8مدير سجلات الطلاب
نظرة عامة على المشروعإضافة طالب3المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادمراجعة - المصفوفات ثنائية الأبعادالمصفوفات المتعرجةأنماط شائعة للمصفوفات ثنائية الأبعادمراجعة - لوحة اللعبة6المجموعات باستخدام القواميس
ما هي المجموعة؟القاموس كمجموعةالإضافة والإزالةالاتحاد والتقاطعفرق المجموعاتمراجعة - إزالة العناصر المكررة9تجميع البيانات المتقدم
جمع القيمإيجاد الحد الأدنى والحد الأقصىالترتيب المخصصمراجعة - أداة ترتيب القواميستدرّب بنفسك: مترجم GDScript عبر الإنترنت