each_cons() - ทับทิม
each_cons() method of enumerable เป็นวิธี inbuilt ใน Ruby ที่วนซ้ำสำหรับองค์ประกอบ N ที่ต่อเนื่องกันโดยเริ่มจากแต่ละองค์ประกอบทุกครั้ง หากไม่มีการบล็อก ระบบจะส่งคืนตัวแจงนับ
JS เทียบเท่ากับ each_cons()
สมมติว่าเรามีอาร์เรย์ของ Number literals (JS เทียบเท่ากับ enumerable ของ Ruby ในกรณีนี้) ฟังก์ชัน each_cons ควรจะเป็นฟังก์ชัน Array ที่ดำเนินการสำหรับแต่ละองค์ประกอบของอาร์เรย์ และยอมรับตัวเลข N (N <=ความยาวของอาร์เรย์) เป็น อาร์กิวเมนต์เท่านั้น และส่งคืนอาร์เรย์ที่มีอาร์เรย์ย่อยขนาด N โดยแต่ละอาร์เรย์ย่อยเริ่มจากองค์ประกอบทั้งหมดทีละรายการ
ตัวอย่างนี้จะทำให้ทุกอย่างชัดเจนขึ้นเล็กน้อย
สมมติว่าเรามีอาร์เรย์แบบนี้ -
const arr =[1, 2, 3, 4, 5];console.log(arr.eachCons(2));
สิ่งที่เรียกให้ eachCons นี้ทำคือ มันสร้างอาร์เรย์ของอาร์เรย์ที่มี 2 องค์ประกอบแต่ละอย่างนี้ -
[[1, 2], [2, 3], [3, 4], [4, 5]]
โปรดสังเกตว่าอาร์เรย์ย่อยถูกสร้างขึ้นสำหรับแต่ละองค์ประกอบของอาร์เรย์ดั้งเดิม จนกว่าเราจะทำได้
หากค่าของ N เป็น 3 แทนที่จะเป็น 2 ผลลัพธ์จะออกมาเป็น −
[[1, 2, 3], [2, 3, 4], [3, 4, 5]]
อีกครั้ง อาร์เรย์ย่อยจะถูกสร้างขึ้นสำหรับทุกองค์ประกอบของอาร์เรย์ จนกว่าเราจะมีองค์ประกอบเพียงพอในอาร์เรย์
แนวทาง
เราจะใช้อัลกอริธึมหน้าต่างบานเลื่อนเพื่อแก้ปัญหานี้
แม้ว่าเราจะสามารถใช้ฟังก์ชัน ES6 ที่ทันสมัยเพื่อแก้ปัญหานี้ในสองบรรทัด แต่แนวทางเดิมนั้นมีประสิทธิภาพมากเมื่อเทียบกับวิธีหลัง
ประการแรก เราจะใช้ a while loop ที่สร้างหน้าต่างเริ่มต้นของเราจากดัชนี 0 ถึง N แล้ว. เราจะใช้ for loop ซึ่งทำงานในขณะที่ส่วนท้ายของหน้าต่างยังน้อยกว่าความยาวของ originalarray
ลูปนี้จะตรวจสอบความเสถียรของหน้าต่างของเรา (เช่น ความยาวของหน้าต่างเท่ากับ N) หากหน้าต่างคงที่ เราจะใส่หน้าต่าง (อาร์เรย์ย่อยนั้นลงในอาร์เรย์ผลลัพธ์) ให้เลื่อนไปทางขวาตามระยะทางของหน่วย และ ยุบ (เช่น start =end) หากหน้าต่างไม่เสถียร เราจะทำการเพิ่มเติมองค์ประกอบเข้าไป
รหัสสำหรับวิธีนี้คือ −
ตัวอย่าง
const arr =[1, 2, 3, 4, 5];const eachCons =function(num){ ให้ res =[], temp =[]; ให้เริ่มต้น =0, สิ้นสุด =0; ในขณะที่(จบผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
<ก่อน>[ [ 1 ], [ 2 ], [ 3 ], [ 4 ], [ 5 ] ][ [ 1, 2 ], [2, 3 ], [3, 4 ], [ 4, 5 ] ][ [1, 2, 3 ], [2, 3, 4 ], [3, 4, 5 ] ][ [ 1, 2, 3, 4 ], [2, 3, 4, 5 ] ]