0Pricing
C# Academy · บทเรียน

ชนิด 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]); // 40

Index ในฐานะค่าที่ใช้งานได้โดยตรง

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]); // 4

IsFromEnd และ 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 True

GetOffset แปลงตำแหน่งให้ชัดเจน

ดัชนีจากท้ายจะมีความหมายก็ต่อเมื่อทราบความยาวของชุดข้อมูลแล้ว 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]); // 15

Index เทียบกับ 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: 95

Index ในโค้ดจริง

ต่อไปนี้คือตัวช่วยขนาดเล็กที่คืนค่าสมาชิกตัวสุดท้ายของอาร์เรย์ใด ๆ โดยใช้ ^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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ชนิด Index และตัวดำเนินการ ^
  2. ชนิด Range และตัวดำเนินการ ..
  3. ช่วงกับอาร์เรย์และสตริง
  4. ชนิดข้อมูลแบบกำหนดเองที่รองรับช่วง
← กลับไปที่ C# Academy