ชนิด Index และตัวดำเนินการ ^
อ้างอิงองค์ประกอบจากท้ายคอลเลกชัน
ชนิด Index และตัวดำเนินการ ^ เป็นบทเรียน C# Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C# Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
ทำความรู้จักชนิดข้อมูล Index
C# มีชนิดข้อมูลเฉพาะ System.Index สำหรับอธิบายตำแหน่งภายในลำดับข้อมูล ต่างจาก int ทั่วไปตรงที่ Index สามารถแทนตำแหน่งที่นับจาก ท้าย ของชุดข้อมูลได้ ไม่ได้จำกัดอยู่แค่การนับจากจุดเริ่มต้น
จึงทำให้โค้ดอย่าง "ขอสมาชิกตัวสุดท้าย" สื่อความหมายได้ชัดเจนและปลอดภัย
using System;
int[] numbers = { 10, 20, 30, 40, 50 };
Index first = 0;
Console.WriteLine(numbers[first]); // 10ตัวดำเนินการ ^ (จากท้าย)
ตัวดำเนินการรูปหมวก ^ สร้าง Index ที่นับจากท้าย ^1 หมายถึงสมาชิกตัวสุดท้าย ^2 หมายถึงสมาชิกตัวรองสุดท้าย และต่อไปในลักษณะเดียวกัน
โปรดสังเกตว่า ^1 คือ ดัชนีที่ถูกต้องตัวสุดท้าย ขณะที่ ^0 มีค่าเท่ากับ Length และอยู่ถัดจากจุดสิ้นสุดหนึ่งตำแหน่ง
using System;
int[] numbers = { 10, 20, 30, 40, 50 };
Console.WriteLine(numbers[^1]); // 50 (last)
Console.WriteLine(numbers[^2]); // 40Index ในฐานะค่าที่ใช้งานได้โดยตรง
Index เป็นค่าจริงที่คุณเก็บไว้ในตัวแปร ส่งให้เมธอด และนำกลับมาใช้ซ้ำได้ วิธีนี้แยก ตำแหน่ง ออกจาก ชุดข้อมูล
using System;
int[] data = { 1, 2, 3, 4, 5 };
Index last = ^1;
Index secondLast = ^2;
Console.WriteLine(data[last]); // 5
Console.WriteLine(data[secondLast]); // 4IsFromEnd และ Value
Index ทุกตัวมีคุณสมบัติสองรายการ ได้แก่ Value (ออฟเซ็ตจำนวนเต็ม) และ IsFromEnd (ระบุว่าสร้างขึ้นด้วย ^ หรือไม่)
using System;
Index fromStart = 2;
Index fromEnd = ^2;
Console.WriteLine(fromStart.Value + " " + fromStart.IsFromEnd); // 2 False
Console.WriteLine(fromEnd.Value + " " + fromEnd.IsFromEnd); // 2 TrueGetOffset แปลงตำแหน่งให้ชัดเจน
ดัชนีจากท้ายจะมีความหมายก็ต่อเมื่อทราบความยาวของชุดข้อมูลแล้ว Index.GetOffset(length) จะแปลงดัชนีดังกล่าวเป็นออฟเซ็ตแบบเริ่มนับจากศูนย์ที่แน่นอน
using System;
Index fromEnd = ^1;
int length = 5;
int offset = fromEnd.GetOffset(length);
Console.WriteLine(offset); // 4^0 อยู่ถัดจากจุดสิ้นสุดหนึ่งตำแหน่ง
เนื่องจาก ^0 แปลงเป็น Length การใช้เป็นดัชนีจึงทำให้เกิดข้อผิดพลาด ค่านี้มีประโยชน์เฉพาะในฐานะขอบเขตบนแบบ ไม่รวมปลายทาง ของช่วง ซึ่งคุณจะได้เรียนรู้ในบทถัดไป
using System;
int[] data = { 1, 2, 3 };
try {
Console.WriteLine(data[^0]); // out of range!
} catch (IndexOutOfRangeException) {
Console.WriteLine("^0 is past the end");
}Index ใช้ได้กับชุดข้อมูลหลายประเภท
ชนิดข้อมูลใดก็ตามที่มีตัวเข้าถึงดัชนี รวมถึงคุณสมบัติ Length หรือ Count และมีการรองรับที่เหมาะสม ก็สามารถใช้ Index ได้ อาร์เรย์ string และ Span<T> ล้วนใช้งานได้ทันที
using System;
string word = "Coddy";
Console.WriteLine(word[^1]); // y
Console.WriteLine(word[^5]); // Cการคำนวณดัชนีแบบไดนามิก
คุณสามารถสร้าง Index จากจำนวนเต็มขณะทำงานได้ โดยใช้ตัวดำเนินการ ^ กับตัวแปร
using System;
int[] data = { 5, 10, 15, 20 };
int n = 2;
Index idx = ^n; // ^ works on variables too
Console.WriteLine(data[idx]); // 15Index เทียบกับ int ทั่วไป
int ทั่วไปจะนับจากจุดเริ่มต้นเสมอ ส่วน Index เพิ่มความสามารถในการนับจากท้าย และยังแปลงโดยนัยจาก int ได้ ดังนั้นโค้ดเดิมจึงยังทำงานต่อได้
using System;
Index a = 1; // implicit from int
Index b = ^1; // from end
Console.WriteLine(a.IsFromEnd); // False
Console.WriteLine(b.IsFromEnd); // Trueหลีกเลี่ยงข้อผิดพลาดคลาดเคลื่อนหนึ่งตำแหน่ง
เดิมการเข้าถึงสมาชิกตัวสุดท้ายต้องเขียนเป็น arr[arr.Length - 1] แต่เมื่อใช้ ^1 จุดประสงค์จะชัดเจน และไม่มีการคำนวณที่อาจเขียนผิด
using System;
int[] scores = { 88, 92, 79, 95 };
Console.WriteLine(scores[scores.Length - 1]); // old way: 95
Console.WriteLine(scores[^1]); // new way: 95Index ในโค้ดจริง
ต่อไปนี้คือตัวช่วยขนาดเล็กที่คืนค่าสมาชิกตัวสุดท้ายของอาร์เรย์ใด ๆ โดยใช้ ^1 ทำให้จุดที่เรียกใช้งานดูสะอาดตา
using System;
static T Last<T>(T[] items) => items[^1];
int[] nums = { 3, 6, 9, 12 };
Console.WriteLine(Last(nums)); // 12ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจเกี่ยวกับชนิดข้อมูล Index และตัวดำเนินการ ^
สรุปทบทวน
คุณได้เรียนรู้ว่า System.Index แทนตำแหน่งที่นับจากจุดเริ่มต้นได้ หรือจะนับจาก ท้ายด้วยตัวดำเนินการ ^ ก็ได้
^1คือสมาชิกตัวสุดท้าย ส่วน^0มีค่าเท่ากับLength(ถัดจากจุดสิ้นสุดหนึ่งตำแหน่ง)IndexมีValue,IsFromEndและGetOffset(length)Indexแปลงโดยนัยจากintและใช้ได้กับอาร์เรย์ สตริง และช่วงหน่วยความจำ
คำถามที่พบบ่อย
บทเรียน “ชนิด Index และตัวดำเนินการ ^” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ชนิด Index และตัวดำเนินการ ^” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C# Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C# Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ชนิด Index และตัวดำเนินการ ^”
อ้างอิงองค์ประกอบจากท้ายคอลเลกชัน คุณปฏิบัติ C# Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C# Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน C# Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “ชนิด Index และตัวดำเนินการ ^” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน C# Academy นี้ได้ไหม
ได้ บทเรียน C# Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ชนิด Index และตัวดำเนินการ ^
- ชนิด Range และตัวดำเนินการ ..
- ช่วงกับอาร์เรย์และสตริง
- ชนิดข้อมูลแบบกำหนดเองที่รองรับช่วง