Structs

ในบทนี้ คุณจะได้เรียนรู้เกี่ยวกับโครงสร้างข้อมูลในภาษา C#

โครงสร้างข้อมูล คืออะไร

โครงสร้างข้อมูล (Struct) เป็นตัวแปรที่ใช้สำหรับเก็บข้อมูลที่มีความเกี่ยวข้องกันในรูปแบบของออบเจ็ค Struct สามารถมีสมาชิกที่เป็น Primitive datatype Reference type และเมธอดได้ โครงสร้างข้อมูลนั้นคล้ายคลึงกับคลาส แต่ว่ามันจะม่สามารถสืบทอดได้ เรามักจะใช้ Struct สำหรับเก็บกลุ่มของข้อมูลที่ไม่มาก ยกตัวอย่าง เช่น เก็บตำแหน่งของจุดในระนาบ เก็บข้อมูลของหนังสือ เป็นต้น นี่เป็นรูปแบบของการประกาศโครงสร้างข้อมูลในภาษา C#

struct Name {
// struct members
}

ในการประกาศโครงสร้างข้อมูล นั้นจะใช้คำสั่ง struct และ Name คือชื่อของโครงสร้างข้อมูลที่ประกาศขึ้น สมาชิกของโครงสร้างข้อมูลนั้นจะมีสองแบบเช่นเดียวกันกับคลาสคือตัวแปรและเมธอด ตัวแปรสามารถเป็นได้ทั้งตัวแปรแบบ Value และ Reference มาดูตัวอย่างในกรณีที่เราจะใช้โครงสร้างข้อมูล

การสร้างและใช้งาน struct

ยกตัวอย่างเช่น เราต้องการเก็บข้อมูลของเมื่อง โดยเมื่อแต่ละเมืองก็จะมีข้อมูลที่แยกย่อยลงไปอีก เช่น ชื่อ ประเทศ และจำนวนประชากร ดังนั้นเราจะใช้โครงสร้างข้อมูลซึ่งจะง่ายในการเก็บ สำหรับ struct นั้นสมาชิกทุกตัวจะต้องมี access specifier เป็น public เสมอ

using System;

struct City {
public string name;
public string contry;
public int population;
}

class StructsExample
{
static void Main(string[] args)
{
City city1;
City city2;

city1.name = "New York City";;
city1.contry = "United State";
city1.population = 2636735;

city2.name = "Kiev";
city2.contry = "Ukraine";
city2.population = 2900920;

Console.WriteLine("Details of city 1");
Console.WriteLine("Name = " + city1.name);
Console.WriteLine("Contry = " + city1.contry);
Console.WriteLine("Population = " + city1.population);

Console.WriteLine("\nDetails of city 2");
Console.WriteLine("City Name = " + city2.name);
Console.WriteLine("Contry = " + city2.contry);
Console.WriteLine("Population = " + city2.population);
}
}

จากตัวอย่างเราได้สร้างโครงสร้างข้อมูลที่มีชื่อว่า City ขึ้นมา และเก็บข้อมูลประเภทต่างๆ ของมัน ในการเข้าถึงสมาชิกของ struct นั้นจะใช้เครืองหมายจุด (.) ในการสร้างตัวแปรสำหรับโครงสร้างนี้นั้น ก็สร้างโดยใช้คำสั่งต่อไปนี้

City city1;
City city2;

คุณจะสังเกตุว่ามันคล้ายๆ การสร้างตัวแปรตัวไป เพียงแค่ City นั้นเป็นตัวแปรชนิดออบเจ็คเท่านั้นเอง แต่มันไม่ได้เป็นออบเจ็คในรูปแบบ OOP นอกจากนี้โครงสร้างข้อมูลยังสามารถประกาศเป็นแบบอาเรย์ได้เช่นกัน

Details of city 1
Name = New York City
Country = United State
Population = 2636735

Details of city 2
City Name = Kiev
Country = Ukraine
Population = 2900920

นี่เป็นผลลัพธ์การทำงานของโปรแกรม ซึ่งคุณจะเห็นได้ว่า Struct นั้นสามารถเก็บข้อมูลไว้ในตัวแปรเดียวได้ ยกตัวอย่างเช่น city1 เป็นตัวแปรเกี่ยวกับเมื่อง New York city ที่ประกอบไปด้วยชื่อเมื่อง ประเทศ และจำนวนประชากร เป็นต้น

ต่อไปเป็นตัวอย่างในการประกาศและใช้งาน Struct กับเมธอด เราจะประกาศ Struct สำหรับเก็บข้อมูลของหนังสือที่ประกอบไปด้วย ชื่อหนังสือ ชื่อผู้แต่ง ปีที่แต่ง และราคาของหนังสือ และเราจะสร้างเมธอดสำหรับ Struct นี่เป็นโค้ดของโปรแกรม

using System;

struct Book
{
public string name;
public string author;
public double price;

public void SetData(string a, string b, double c)
{
name = a;
author = b;
price = c;
}

public void GetData()
{
Console.WriteLine("Book name: " + name);
Console.WriteLine("Author: " + author);
Console.WriteLine("Price: " + price + " USD");
}
}

class StructsExample
{
static void Main(string[] args)
{

Book book1 = new Book();
Book book2 = new Book();

book1.SetData("The Return of the Prodigal Son",
"Henri J. M. Nouwen", 9.41);
book2.SetData("Learning C# basic", "marcuscode.com", 15.99);

book1.GetData();
book2.GetData();

}
}

ในตัวอย่าง เป็นโครงสร้างข้อมูลสำหรับเก็บข้อมูลของหนังสือ เราได้สร้างเมธอดสำหรับการกำหนดข้อมูลและดูข้อมูลของหนังสือ คุณจะเห็นว่ามันสามารถใช้ได้เหมือนออบเจ็ค เราสร้างตัวแปรของ Struct จากคำสั่ง new สำหรับการใช้งานกับเมธอด

Book name: The Return of the Prodigal Son
Author: Henri J. M. Nouwen
Price: 9.41 USD
Book name: Learning C# basic
Author: marcuscode.com
Price: 15.99 USD

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

Array of structure

เราสามารถสร้างตัวแปรอาเรย์ให้กับโครงสร้างข้อมูลได้เหมือนตัวแปรทั่วไป และสามารถสร้างได้ทั้งอาเรย์ทั่วไปหรือ Jagged อาเรย์ มาดูตัวอย่างการสร้างอาเรย์กับโครงสร้างข้อมูล

using System;

struct City {
public string name;
public string contry;
public int population;
}

class StructsExample
{
static void Main(string[] args)
{
City[] city = new City[2];

city[0].name = "New York City";;
city[0].contry = "United State";
city[0].population = 2636735;

city[1].name = "Kiev";
city[1].contry = "Ukraine";
city[1].population = 2900920;

Console.WriteLine("Details of city 1");
Console.WriteLine("Name = " + city[0].name);
Console.WriteLine("Contry = " + city[0].contry);
Console.WriteLine("Population = " + city[0].population);

Console.WriteLine("\nDetails of city 2");
Console.WriteLine("City Name = " + city[1].name);
Console.WriteLine("Contry = " + city[1].contry);
Console.WriteLine("Population = " + city[1].population);
}
}

เราได้ใช้ตัวอย่างก่อนหน้านำมาสร้างเป็นแบบอาเรย์ ที่มีขนาดเท่ากับสอง ซึ่งจากสองตัวอย่างก่อนหน้านั้นจะได้ผลลัพธ์ที่เหมือนกันคือดังข้างล่างนี้

Details of city 1
Name = New York City
Contry = United State
Population = 2636735

Details of city 2
City Name = Kiev
Contry = Ukraine
Population = 2900920

New keyword และเมธอด

เหมือนที่ได้กล่าวไปแล้วก่อนหน้านี้ว่า struct สามารถมี constructor และเมธอดได้เช่นกัน ในการสร้าง struct ที่มี constructor นั้นจะใช้คำสั่ง new ในการประกาศตัวแปรให้กับ struct มาดูตัวอย่างของโครงสร้างข้อมูลต่อไปนี้

using System;

struct City {
public string name;
public string contry;
public int population;
public float area;

public City(string name, string contry, int population, float area) {
this.name = name;
this.contry = contry;
this.population = population;
this.area = area;
}

public float getDensity () {
return (float) population / area;
}
}

class StructsExample
{
static void Main(string[] args)
{
City city = new City("New York City", "United State", 2636735, 468.9F);

Console.WriteLine("Name = " + city.name);
Console.WriteLine("Contry = " + city.contry);
Console.WriteLine("Population = " + city.population);
Console.WriteLine("Area = " + city.area + "sq mi");
Console.WriteLine("Density = " + city.getDensity() + " people/sq mi");
}
}

จากตัวอย่างเราได้ประกาศ Constructor สำหรับ struct โดยมันจะมีชื่อที่เหมือนกัน ใน Construct นั้นจะต้องกำหนดค่าให้กับสมาชิกทุกตัวเสมอ และเมื่อสร้างตัวแปรของ struct จะใช้คำสั่ง new และมีเมธอด getDensity ซึ่งการเรียกใช้งานก็จะเหมือนกับคลาส

Name = New York City
Contry = United State
Population = 2636735
Area = 468.9sq mi
Density = 5623.235 people/sq mi

และนี่คือผลลัพธ์ของโปรแกรม

ในบทนี้คุณได้เรียนรู้ในการสร้างและการใช้งานโครงสร้างข้อมูลในภาษา C# และการนำไปใช้กับอาเรย์ และเมธอดในโครงสร้างข้อมูล


บทความเกี่ยวกับ Structs

โครงสร้างข้อมูล ในภาษา C

โครงสร้างข้อมูล (structure) คือกลุ่มของตัวแปรที่สามารถสร้างและเก็บไว้ในตัวแปรเดียวที่เรียกว่า data structure ในภาษา C เราสามารถสร้างและออกแบบโครงสร้างข้อมูลของ...

โครงสร้างข้อมูล ในภาษา C++

Data structure เป็นกลุ่มของตัวแปรที่สามารถรวมอยู่ในตัวแปรตัวเดียว เราเรียกว่า structure ตัวแปรที่อยู่ข้างในมันเรียกว่า members members สามารถมีประเภทแระขนาดต่า...

Structures ในภาษา Visual Basic

Structures หรือโครงสร้างข้อมูล คือประเภทข้อมูลประเภทหนึ่งในภาษา Visual Basic ที่สามารถมีสมาชิกภายในตัวของมันได้ ลักษณะโครงสร้างของ Structure นั้นจะคล้ายกับคลาส ...