لقد ابتكرت وظيفة تحدد العناصر بشكل عشوائي من مصفوفة، مما يضمن عدم تكرار التحديدات الأخيرة. على الرغم من أن الحل الحالي يعمل بشكل فعال، إلا أن لديك مخاوف بشأن كفاءته وما إذا كان يمكن أن يؤدي إلى تكرار الحلقات بشكل مفرط. دعونا نستكشف نهجًا أكثر كفاءة.
1. اعتبارات العودية
نعم، يمكن اعتبار وظيفة ChooseName() الخاصة بك متكررة لأنها تطلق على نفسها حتى تجد اسمًا فريدًا. يمكن أن يكون التكرار مفيدًا لبعض المشكلات، ولكن من المهم أن تضع في اعتبارك استخدام المكدس واحتمال العمق الزائد.
2. حل فعال
لمعالجة المخاوف المتعلقة بالكفاءة، يمكننا اعتماد استراتيجية مختلفة. بدلًا من الاعتماد على التكرار والتكرار حتى يتم العثور على اسم فريد، يمكننا إنشاء نسخة من المصفوفة الأصلية واختيار العناصر عشوائيًا من النسخة حتى يتم تحديد جميع العناصر. بمجرد استنفاد جميع العناصر، نقوم بإعادة تعيين النسخة إلى حالتها الأصلية.
إليك تطبيق JavaScript لهذا الأسلوب:
function randomNoRepeats(array) {
var copy = array.slice(0);
return function() {
if (copy.length "Bar"
console.log(chooser()); // => "Foo"
console.log(chooser()); // => "Gah"
console.log(chooser()); // => "Foo" -- only repeats once all items are exhausted.
يستفيد هذا الأسلوب من طريقة شريحة المصفوفة () الخاصة بجافا سكريبت لإنشاء نسخة سطحية من المصفوفة الأصلية. ثم يقوم بعد ذلك بتحديد عناصر عشوائية من النسخة بشكل متكرر وإزالتها من النسخة، مما يحاكي بشكل فعال تحديدًا عشوائيًا دون تكرار حتى يتم استنفاد جميع العناصر. بمجرد تحديد جميع العناصر، تتم إعادة تعيين النسخة، مما يسمح ببدء التحديد العشوائي مرة أخرى.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3