Page cover image

Multidimensional Indexers

ปานฟ้า พฐาบัณพร 650710835

Multidimensional Indexers ก็คล้าย ๆ กับ Multidimensional Arrays แต่ Multidimensional Indexers จะเป็นเครื่องมือที่ช่วยในการจัดการหรือเข้าถึงค่าใน Array หลายมิติ โดยมีการส่ง Parameter หลาย ๆ ตัวเข้าไปจัดการพร้อมกันได้ โดยอาจจะมีการสร้าง Multidimensional Indexers ที่เอาไว้จัดการ Array และรับ Parameter ต่าง ๆ ไปคำนวณ หรือจัดการข้อมูลต่าง ๆ ใน Array ตามวัตถุประสงค์ของผู้เขียน


ความแตกต่างระหว่าง Multidimensional Indexers กับ Multidimensional Arrays

Multidimensional Indexers

  • เป็นเครื่องมือหรือตัวจัดการข้อมูลใน Arrays หรือ Index หลายมิติ

  • มีการส่ง Parameter เพื่อนำไปทำการจัดการกับข้อมูลใน Arrays โดยมีการประกาศ Multidimensional Indexers ที่ไว้จัดการกับข้อมูลใน Arrays

Multidimensional Arrays

  • เป็นโครงสร้างข้อมูลประเภทหนึ่งที่เอาไว้จัดเก็บข้อมูลต่าง ๆ ซึ่งมีกี่มิติก็ได้ แต่ต้องมากกว่า 1 มิติ

  • ไม่ต้องมีการส่ง Parameter เพราะสามารถประกาศการสร้าง Arrays และใส่ข้อมูลได้โดยตรง


Example

Example 1
using System; 

class MultiIndexers { 
	 
	int[, ] data = new int[5, 5]; 
	
	// Multidimensional Indexers
	public int this[int num1, int num2] 
	{ 
		get
		{ 
			return data[num1, num2]; 
		} 
		
		set
		{ 	
			data[num1, num2] = value; 	
		} 
	} 
} 

class Example1 { 
	
	public static void Main(String []args) 
	{ 
		
		MultiIndexers Array = new MultiIndexers(); 
		
		Array[0, 0] = 1; 
		Array[0, 1] = 2; 
		Array[0, 2] = 3; 
		
		Array[1, 0] = 4; 
		Array[1, 1] = 5; 
		Array[1, 2] = 6; 
		
		Array[2, 0] = 7; 
		Array[2, 1] = 8; 
		Array[2, 2] = 9; 
	
		Console.WriteLine("{0}\t{1}\t{2}\n{3}\t{4}\t{5}\n{6}\t{7}\t{8}", 
								Array[0, 0], Array[0, 1], Array[0, 2], 
								Array[1, 0], Array[1, 1], Array[1, 2], 
								Array[2, 0], Array[2, 1], Array[2, 2]); 
	
	} 
}

จะเห็นได้ว่าบรรทัดที่ 11 มีการประกาศ Multidimensional Indexer ไว้จัดการเกี่ยวกับ Arrays ซึ่งใน Multidimensional Indexer นี้มีการรับ Parameter 2 ตัวคือค่า index1 (row) และ index2 (column) และลงมาดูที่บรรทัด 45 ใน Main Method มีการสร้าง Object ของ Class MultiIndexers โดยตัวแปร index จะส่งตำแหน่ง [row, column] = value ไปยัง Multidimensional Indexer ใน Class MultiIndexers และทำการ set ค่าแต่ละตำแหน่งตาม Parameter ที่ส่งมา โดย set accessor และ return กลับไปที่ Main Method โดย get accessor จึงออกมาเป็น Output ตามที่แสดงไว้ข้างต้น

Example 2
using System; 

class MultiIndexers { 
	
	public MultiIndexers() {} 

	// Multidimensional Indexers
	public int this[int i, int j] 
	{ 
		get
		{ 
			return (i + j); 
		} 
	} 

	public static void Main(String []args) 
	{ 
		MultiIndexers Array = new MultiIndexers(); 
		
		for (int i = 0; i <= 2; i++) { 
			for (int j = 1; j <= 3; j++) 
			{ 
				Console.Write(Array[i, j] + "\t"); 
			} 
			Console.WriteLine(); 
		} 
	} 
} 

ในตัวอย่างที่ 2 ไม่มีการใช้ set accessor ใน Multidimensional Indexers มีแค่การใช้ get accessor อย่างเดียว โดยนำ Parameter ทั้ง 2 ตัวมาคำนวณตามบรรทัด 12 แล้ว return กลับไปที่ Main Method

Example 3
using System;

class MultiIndexers
{
	private int[,] data = new int[3, 3];

	// Multidimensional Indexers
	public int this[int row, int column]
	{
		get
		{
			return data[row, column];
		}
		set
		{
			data[row, column] = value;
		}
	}

	static void Main(string[] args)
	{
		MultiIndexers Array = new MultiIndexers();
		Array[0, 0] = 1;
		Array[0, 1] = 2;
		Array[1, 0] = 3;

		int value = Array[1, 0];
		Console.WriteLine(value);
	}
}

ในตัวอย่างที่ 3 เป็นการใช้ Multidimensional Indexers ในการดึง Data ที่อยู่ใน row และ column ตาม Parameter ที่ถูกส่งมาจาก Main Method จากบรรทัดที่ 26 ส่งไปยัง Multidimensional Indexers ในบรรทัดที่ 7 และมีการ return ค่ากลับมายัง Main Method ในบรรทัดที่ 11 ซึ่งทำใน get accessor ส่วน set accessor ในบรรทัดที่ 15 ทำการ set Data ที่ถูกส่งมาจาก Main Method ในบรรทัดที่ 22-24

Example 4
using System;

class MultiIndexers
{

	// Multidimensional Indexers
	public int this[int row, int column]
	{
		get
		{
			if (row == 0 && column == 0)
				return 15;
			else if (row == 1 && column == 1)
				return 25;
			else if (row == 2 && column == 2)
				return 35;
			else
				return -1; 
		}
	}
}

class Example4
{
	static void Main(string[] args)
	{
		MultiIndexers Array = new MultiIndexers();
		Console.WriteLine(Array[0, 0]); 
		Console.WriteLine(Array[1, 1]); 
		Console.WriteLine(Array[2, 2]); 
	}
}

ในตัวอย่างที่ 4 Multidimensional Indexers รับ Parameter มาทั้งหมด 2 ตัวคือ row และ column แต่ในการทำงานของ Multidimensional Indexers จะเป็นการนำ 2 Parameter มาเปรียบเทียบกับเงื่อนไขที่กำหนดตามบรรทัดที่ 11-18 และ return ค่ากลับไปยัง Main Method


เปรียบเทียบ Multidimensional Indexers ในภาษา C# กับภาษาต่าง ๆ

Multidimensional Indexers ในภาษา C# ทำงานเป็นเหมือนเครื่องมือในการจัดการข้อมูลใน Arrays โดยต้องทำประกาศ Multidimensional Indexers ตามวัตถุประสงค์ของผู้เขียนว่าต้องการให้ Multidimensional Indexers ทำหน้าที่อย่างไร และใน Method มี 2 accessors ที่ใช้คือ set accessor เอาไว้ set ค่าข้อมูลที่ถูกส่งมาจาก Main Method มา set ไว้ใน Array ส่วน get accessor จะทำหน้าที่ในการ return ค่ากลับไปยัง Main Method โดยอาจจะมีการกำหนดเงื่อนไข หรือการคำนวณ ทำได้หมดตามความต้องการของผู้เขียน

แต่ในภาษา Java, C, Python ไม่มี Multidimensional Indexer เพราะ Multidimensional Indexer เป็น Property พิเศษของภาษา C# โดยของภาษา Java, Python จะเป็นการสร้าง Method และมี Getter Setter มาทำหน้าที่แทน Multidimensional Indexer ส่วนภาษา C จะใช้ Function ทำงานแทน Getter Setter และเรามี Code ตัวอย่างให้ดูดังต่อไปนี้

using System; 

class MultiIndexers { 
	
	public MultiIndexers() {} 

	// Multidimensional Indexers
	public int this[int i, int j] 
	{ 
		get
		{ 
			return (i + j); 
		} 
	} 

	public static void Main(String []args) 
	{ 
		MultiIndexers Array = new MultiIndexers(); 
		
		for (int i = 0; i <= 2; i++) { 
			for (int j = 1; j <= 3; j++) 
			{ 
				Console.Write(Array[i, j] + "\t"); 
			} 
			Console.WriteLine(); 
		} 
	} 
} 

Video Presentation


Slide Presentation


Reference

  • ในเว็บนี้ใช้ศึกษาการทำงานของ Multidimensional Indexers

  • ในเว็บนี้ใช้ศึกษาเกี่ยวกับความแตกต่างระหว่าง Multidimensional Indexers กับ Multidimensional Arrays

  • เว็บนี้ใช้ศึกษาเพิ่มเติมเกี่ยวกับ Multidimensional Arrays เพื่อนำไปเปรียบเทียบความแตกต่างระหว่าง Multidimensional Indexers

  • เว็บนี้ใช้ศึกษาเพิ่มเติมเกี่ยวกับการใช้งาน getter, setter ในภาษา Java แทน Multidimensional Indexers เพราะในภาษา Java ไม่มี Multidimensional Indexers

  • เว็บนี้ใช้ศึกษาเพิ่มเติมเกี่ยวกับการใช้งาน getter, setter ในภาษา Python


Last updated