توجد قائمة مرتبطة مزدوجة في كود مصدر godots ( core / list.h ).
سيكون من الجيد أن يتم الكشف عن ذلك لأن هناك بعض الحالات التي تؤدي فيها القائمة المرتبطة المزدوجة أداءً أفضل كمتجه.
خاصة عندما يتعلق الأمر بإدخال / إزالة العناصر في أي موضع باستثناء النهاية.
يمكنني القيام ببعض الأعمال في هذا الصدد ، لكنني لست متأكدًا من كيفية التعامل مع قفله وتسجيله (على الرغم من أنني قد أحاول عكس سلوك فئة Array).
فضح القائمة أساسا
يجب أن يعمل تطبيقه على أنه قابل للتكرار أيضًا بشكل مشابه لكيفية قيام Array بذلك.
بالإضافة إلى ذلك (وإذا طُلب مني ذلك ، يمكنني فتح مشكلة أخرى لهذا) ، فإن تعريض core / ring_buffer.h لأن قائمة الانتظار ستكون أيضًا رائعة لاحتياجات قائمة الانتظار.
يجب أن يعمل بشكل أفضل كقائمة انتظار باستخدام قائمة مرتبطة مزدوجة (وأفضل تعريف كقائمة قائمة على المتجه) مع وجود قيود على أنه يحتوي على حجم "ثابت" وإمكانية تخصيص ذاكرة غير مستخدمة ofc.
ولكن هناك حالات تتطلب هذا السلوك بالضبط.
لا تزال قابلة للتكرار / ذات صلة في الإصدار 3.1 Master 9e7cee2: لم يتم الكشف عن بنية البيانات هذه بعد.
كنت على وشك النشر على reddit يسأل عما إذا كان هناك تنفيذ مناسب للقائمة المرتبطة يمكنني استخدامه.
أحتاج إلى قائمة FIFO سريعة ، والمصفوفة لا تقوم بهذه المهمة.
كتبت هذا للتو كبديل للمصفوفة ، وحصلت على تحسينات كبيرة في السرعة:
extends Node
var front_space = 0
var array_len = 0
var array_data = []
func push_back(val):
if array_data.size() < front_space+array_len+1:
enlarge()
array_len += 1
array_data[front_space+array_len-1] = val
func pop_back():
if array_data.size() > array_len*8:
reseat()
array_len -= 1
return array_data[front_space+array_len]
func back():
return array_data[front_space+array_len-1]
func pop_front():
if front_space > array_len:
reseat()
if array_data.size() > array_len*8:
reseat()
front_space += 1
array_len -= 1
return array_data[front_space-1]
func front():
return array_data[front_space]
func size():
return array_len
func enlarge():
array_data.resize(front_space+array_len*2+1)
func reseat():
var new_array = []
new_array.resize(array_len*2)
for i in range(array_len):
new_array[i] = array_data[i+front_space]
front_space = 0
array_data = new_array
func print_debug():
print("front: ", front_space,", len: ",arr
تتم الآن مناقشة مقترحات الميزات والتحسين الخاصة بمحرك Godot ومراجعتها في أداة تعقب المشكلات الخاصة بمقترحات تحسين Godot (GIP) ( godotengine / godot- مقترحات ). يحتوي متتبع GIP على نموذج مشكلة مفصل مصمم بحيث تتضمن المقترحات جميع المعلومات ذات الصلة لبدء مناقشة مثمرة ومساعدة المجتمع على تقييم صحة الاقتراح الخاص بالمحرك.
المتتبع الرئيسي (
إذا كنت مهتمًا بمقترح الميزة هذا ، فيرجى فتح اقتراح جديد على متتبع GIP باتباع نموذج المشكلة المحدد (بعد التحقق من عدم وجوده بالفعل). تأكد من الإشارة إلى هذه المشكلة المغلقة إذا كانت تتضمن أي مناقشة ذات صلة (والتي نشجعك أيضًا على تلخيصها في الاقتراح الجديد). شكرا لك مقدما!
التعليق الأكثر فائدة
لا تزال قابلة للتكرار / ذات صلة في الإصدار 3.1 Master 9e7cee2: لم يتم الكشف عن بنية البيانات هذه بعد.