ฉันรู้สึกลำบากในการทำความเข้าใจว่าการเปลี่ยนและวิธีการยกเลิกการเปลี่ยนของคลาส 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' จากชื่อของเมธอดได้ในใจเพื่อจดจำว่าองค์ประกอบใด "ทิ้ง" และองค์ประกอบใด "แทรก" :)