اذهب إلى المحتوى

السؤال

Recommended Posts

  • 1
نشر

الشكل المبسط لشيفرة تبديل قيمة عنصرين في جافاسكربت بالشكل التالي:

let a = 1;
let b = 2;

[a, b] = [b, a];  // [a, b] = [2, 1]

// النتيجة
a; // => 2
b; // => 1

هي بسيطة فقط عليك تعويض القيم، بالنسبة لدليل المصفوفة i - j فهو ثابت لا تتغير قيمته

في الشيفرة لديك:

let array = [1, 2, 3, 4, 5];

[array[i], array[j]] = [array[j], array[i]];

لنستبدل أول قيمتين:

let array = [1, 2, 3, 4, 5];

let i = 0;
let j = 1;

[array[i], array[j]] = [array[j], array[i]];
=>
[array[0], array[1]] = [array[1], array[0]];
=> 
[array[0], array[1]] = [2, 1];
=>

array[0] => 2
array[1] => 1

وهكذا يتم تبديل القيمتين بين عنصرين في مصفوفة.

دليل العنصر ثابت إنما قيمة العنصر ذو الدليل X هي التي تتغير.

بالنسبة للشيفرة بشكل عام تقوم بخلط عناصر المصفوفة من خلال تبديل العنصر i مع عنصر آخر ذو دليل عشوائي j

  • 1
نشر

يقوم هذا السطر بتبديل قيمة عنصرين معًا، فمثلًا إن كان لدينا المصفوفة التالية:

let array = [1, 2, 3, 4, 5];

وقمنا بتنفيذ السطر التالي:

// يقوم السطر التالي بتبديل قيمة أول عنصرين في المصفوفة
[array[0], array[1]] = [array[1], array[0]]
console.log(array)	// Output: [2, 1, 3, 4, 5]

وفي الدالة التي أرفقتها في الأعلى (shuffle) يتم إستعمال هذه الطريقة لخلط العناصر في المصفوفة بطريقة عشوائية 

  • 1
نشر
بتاريخ 2 دقائق مضت قال Brahim Semmani:

فهمت ذالك لكن ليس بنسبة 100% 

فالعملية تتم في حلقة تنازلية i-- , و j رقم عشوائي من 0 حتى 4

والتساؤلات مطروحة عندي ؟؟  كيف تتم العملية بدون تكرار ..

شرط التكرار هو أن يكون المتغير i أكبر من صفر (i > 0)، وبما أن المتغير تبدأ قيمته من 4 (طول المصفوفة - 1) فستكون قيمة هذا المتغير 4 ثم في الدورة الثانية ستكون قيمته 3 ثم 2 في التي تليها ثم 1 في آخر دورة تكرار. (4 - 3 - 2 - 1)

ثم في السطر المسئول عن إسناد قيمة للمتغير j :

// قيمة عشوائية ما بين 0 و 4
let j = Math.floor(Math.random() * (i + 1));

أي أن قيمة المتغير j  ستكون ما بين 0 و 4 في أول دورة، وستكون قيمته ما بين 0 و 3 في ثاني دورة وهكذا. ( [0:4]  -  [0:3]  -  [0:2]  -  [0:1] )

ثم في السطر التالي يتم تبديل قيمة العنصر ذي الفهرس 4 index مع عنصر آخر مختار بطريقة عشوائية:

// في الدورة الأولى
// i = 4
// j = رقم عشوائي من 0 إلى 4
// أي سيتم تبديل العنصر 4 بأحد العناصر الأخرى في المصفوفة
[array[i], array[j]] = [array[j], array[i]];

يتم نفس الأمر في الدورة الثانية مع العنصر 3 (أي يتم تبديله مع أحد العناصر الأخرى) وهكذا إلى أن تنتهي آخر دورة.

  • 0
نشر
بتاريخ 3 دقائق مضت قال سامح أشرف:

يقوم هذا السطر بتبديل قيمة عنصرين معًا، فمثلًا إن كان لدينا المصفوفة التالية:


let array = [1, 2, 3, 4, 5];

وقمنا بتنفيذ السطر التالي:


// يقوم السطر التالي بتبديل قيمة أول عنصرين في المصفوفة
[array[0], array[1]] = [array[1], array[0]]
console.log(array)	// Output: [2, 1, 3, 4, 5]

وفي الدالة التي أرفقتها في الأعلى (shuffle) يتم إستعمال هذه الطريقة لخلط العناصر في المصفوفة بطريقة عشوائية 

فهمت ذالك لكن ليس بنسبة 100% 

فالعملية تتم في حلقة تنازلية i-- , و j رقم عشوائي من 0 حتى 4

والتساؤلات مطروحة عندي ؟؟  كيف تتم العملية بدون تكرار ..

 

  • 0
نشر
بتاريخ 5 دقائق مضت قال سامح أشرف:

// في الدورة الأولى // i = 4 // j = رقم عشوائي من 0 إلى 4 // أي سيتم تبديل العنصر 4 بأحد العناصر الأخرى في المصفوفة [array[i], array[j]] = [array[j], array[i]];

والعنصر j الا يتم تبديله بالعنصر i؟

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...