คำตอบอย่างเป็นทางการ
เพื่อความชัดเจนยิ่งขึ้นต่อไปนี้เป็นความคิดเห็นจากMads Torgersenอธิบายการตัดสินใจออกแบบนี้จากบล็อกโพสต์ C # 8 :
เราตัดสินใจที่จะติดตาม Python เมื่อพูดถึงการคำนวณตั้งแต่ต้นจนจบ 0
กำหนดองค์ประกอบแรก (เช่นเคย) และ ^0
องค์ประกอบ "length'th" นั่นคือองค์ประกอบหนึ่งที่ถูกต้องในตอนท้าย ด้วยวิธีนี้คุณจะได้รับความสัมพันธ์อย่างง่าย ๆ ที่ตำแหน่งขององค์ประกอบจากจุดเริ่มต้นบวกกับตำแหน่งจากจุดสิ้นสุดเท่ากับความยาว x
ใน ^x
คือสิ่งที่คุณจะได้หักออกจากความยาวถ้าคุณต้องการทำด้วยตัวคุณเองคณิตศาสตร์
ทำไมไม่ใช้เครื่องหมายลบ ( -
) แทน^
โอเปอเรเตอร์hat ( ) ใหม่ สิ่งนี้เกี่ยวข้องกับช่วงเป็นหลัก อีกครั้งในการรักษาด้วย Python และอุตสาหกรรมส่วนใหญ่เราต้องการให้ช่วงของเรานั้นครอบคลุมตั้งแต่เริ่มต้นโดยเฉพาะในตอนท้าย ดัชนีที่คุณส่งผ่านเพื่อบอกว่าช่วงควรไปจนสุดคืออะไร? ใน C # คำตอบนั้นง่าย: x..^0
ไปจาก x
ท้ายที่สุด ใน Python ไม่มีดัชนีที่ชัดเจนที่คุณสามารถให้: -0
ใช้งานไม่ได้เพราะมันเท่ากับ0
องค์ประกอบแรก! ดังนั้นใน Python คุณต้องปล่อยให้ดัชนีสิ้นสุดสมบูรณ์เพื่อแสดงช่วงที่ไปยังจุดสิ้นสุด: x..
. หากคำนวณช่วงท้ายของช่วงเวลานั้นคุณต้องจำไว้ว่าต้องใช้ตรรกะพิเศษในกรณีที่เกิด0
ขึ้น เช่นเดียวกับในx..-y
ที่ไหนy
0
ถูกคำนวณและออกมา นี่คือความรำคาญทั่วไปและแหล่งที่มาของข้อบกพร่อง
สุดท้ายโปรดทราบว่าดัชนีและช่วงเป็นประเภทชั้นหนึ่งใน. NET / C # พฤติกรรมของพวกเขาไม่ได้เชื่อมโยงกับสิ่งที่พวกเขานำไปใช้หรือแม้กระทั่งที่จะใช้ในตัวทำดัชนี คุณทั้งหมดสามารถกำหนดดัชนีของคุณเองที่ใช้ดัชนีและอีกคนหนึ่งที่ใช้เวลาRange
- และเรากำลังจะเพิ่ม indexers Span
ดังกล่าวไปเช่น แต่คุณสามารถมีวิธีที่ใช้ช่วงเช่น
คำตอบของฉัน
ฉันคิดว่านี่คือการจับคู่ไวยากรณ์คลาสสิกที่เราคุ้นเคย:
value[^1] == value[value.Length - 1]
หากใช้เป็น 0 จะทำให้เกิดความสับสนเมื่อมีการใช้ไวยากรณ์ทั้งสองแบบเคียงข้างกัน วิธีนี้มันมีภาระการรับรู้ต่ำกว่า
ภาษาอื่นเช่น Python ก็ใช้หลักการเดียวกัน
[beginInclusive, endExclusive)
กัน มันเป็นเรื่องธรรมดา