ฉันรู้สึกลำบากในการทำความเข้าใจว่าการเปลี่ยนและวิธีการยกเลิกการเปลี่ยนของคลาส Array ทำใน Ruby อย่างไร ใครช่วยให้ฉันเข้าใจสิ่งที่พวกเขาทำ
pushอยู่ด้านบนและshiftออกไปอีกด้านหนึ่ง
ฉันรู้สึกลำบากในการทำความเข้าใจว่าการเปลี่ยนและวิธีการยกเลิกการเปลี่ยนของคลาส Array ทำใน Ruby อย่างไร ใครช่วยให้ฉันเข้าใจสิ่งที่พวกเขาทำ
pushอยู่ด้านบนและshiftออกไปอีกด้านหนึ่ง
คำตอบ:
Array.shift ลบองค์ประกอบแรกออกจากอาร์เรย์และส่งคืน
a = [1,2,3]
puts a.shift
=> 1
puts a
=> [2, 3]
Unshift นำค่าที่ระบุไว้ด้านหน้าอาร์เรย์เลื่อนองค์ประกอบอื่น ๆ ทั้งหมดขึ้นหนึ่ง
a=%w[b c d]
=> ["b", "c", "d"]
a.unshift("a")
=> ["a", "b", "c", "d"]
shiftและunshiftทำหน้าที่เหมือนกอง FILO pushและshiftจะทำหน้าที่เหมือนคิว FIFO เว้นแต่ฉันจะสับสนเกี่ยวกับบางสิ่ง
shiftและunshiftทำหน้าที่ในลักษณะเดียวกับpopและpush: พวกเขามีจุดมุ่งหมายเพื่อใช้อาร์เรย์เป็นสแต็กที่คุณสามารถต่อท้ายและลบองค์ประกอบได้ (โดยปกติจะเป็นหนึ่งครั้งต่อครั้ง) ความแตกต่างคือเพียงแค่นั้นshiftและunshiftเพิ่ม / ลบองค์ประกอบที่จุดเริ่มต้นของนั้นArrayจริงเปลี่ยนไอเอ็นจีองค์ประกอบอื่น ๆ ทั้งหมดในขณะpopและpushเพิ่ม / ลบองค์ประกอบในตอนท้ายของArrayเพื่อรักษาดัชนีองค์ประกอบอื่น ๆ
ตัวอย่าง:
# Spacing for clarity:
a = [2, 4, 8] # a => [2, 4, 8]
a.push(16, 32) # a => [2, 4, 8, 16, 32]
a.unshift(0, 1) # a => [0, 1, 2, 4, 8, 16, 32]
a.shift # a => [1, 2, 4, 8, 16, 32]
a.pop # a => [1, 2, 4, 8, 16]
มันคว้าองค์ประกอบแรกลบออกจากอาร์เรย์และส่งคืนองค์ประกอบที่ถูกลบ โดยพื้นฐานแล้วเป็นวิธีการจัดการอาร์เรย์เหมือนสแต็ก: shiftป๊อปunshiftคือพุช
popและpushเป็นArrayวิธีการที่ไม่ควรสร้างความสับสน :-)
หากคุณสามารถคิดว่าอาร์เรย์เป็นเหมือนคิวของค่าที่ต้องประมวลผลคุณสามารถใช้ค่าถัดไป (ด้านหน้า) และ "กะ" มูลค่าอื่น ๆ เพื่อครอบครองพื้นที่ว่างที่มีอยู่ การ unshift ทำให้ค่ากลับเข้ามา - บางทีคุณอาจยังไม่พร้อมที่จะประมวลผลบางส่วนหรือปล่อยให้โค้ดบางส่วนจัดการในภายหลัง
มันส่งคืนองค์ประกอบแรกของอาร์เรย์และลบออกจากอาร์เรย์โดยเลื่อนองค์ประกอบกลับที่เดียว
ดังนั้นการขยับ [1,2,3,4,5]
ผลตอบแทนและชุดอาร์เรย์จะเป็น1[2,3,4,5]
เพิ่มเติมที่นี่ .
shift/unshiftเหมือนpush/popที่ปลายอีกด้านหนึ่งของอาร์เรย์คุณสามารถวาง 'f' จากชื่อของเมธอดได้ในใจเพื่อจดจำว่าองค์ประกอบใด "ทิ้ง" และองค์ประกอบใด "แทรก" :)