Khóa học lập trình C# nâng cao

Khóa học lập trình C# nâng cao

Tuple trong C# Tuple trong C# Tuple trong C# Tuple trong C# Tuple trong C# 0/5 (24 reviews)

Tuple trong C#

Đã đăng 2018-03-03 20:35:34 bởi Kteam
0 bình luận 4120 lượt xem
Tuple trong C# 0 /5 stars (0 reviews)
 

Dẫn nhập

Ở các bài học trước, chúng ta đã cùng nhau tìm hiểu về DICTIONARY TRONG C#. Hôm nay chúng ta sẽ cùng tìm hiểu về Tuple trong C#.


Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

  • Tuple là gì?
  • Cách sử dụng Tuple.

Tuple là gì?

Tuple là một kiểu dữ liệu có cấu trúc, giúp lưu trữ các dữ liệu phức tạp mà không cần phải tạo ra một struct hay class mới (Nếu bạn nào chưa nắm về kiểu dữ liệu có cấu trúc cũng như struct, class thì có thể xem lại bài STRUCT TRONG C#CLASS TRONG C#).

C# cung cấp cho chúng ta:

  • 8 lớp generic (khái niệm về generic đã được trình bày trong bài GENERIC TRONG C#) Tuple<>.

public class Tuple <T1>

public class Tuple <T1, T2>

public class Tuple <T1, T2, T3>

public class Tuple <T1, T2, T3, T4>

public class Tuple <T1, T2, T3, T4, T5>

public class Tuple <T1, T2, T3, T4, T5, T6>

public class Tuple <T1, T2, T3, T4, T5, T6, T7>

public class Tuple <T1, T2, T3, T4, T5, T6, T7, TRest>

Mỗi lớp Tuple<> đã được định nghĩa sẵn các Property có tên Item1, Item2, Item3,… tương ứng với các kiểu dữ liệu T1, T2, T3,… được truyền vào. Hình ảnh sau đây là một ví dụ:

Đây là hình ảnh lớp Tuple <T1, T2>, khi ta truyền 2 kiểu dữ liệu vào T1, T2 thì trong lớp này sẽ có 2 Property Item1, Item2 có kiểu dữ liệu tương ứng.

  • Một static class (khái niệm về static class đã được trình bày trong bài STATIC TRONG C#) Tuple. Trong lớp sẽ chứa các hàm Create<> nhằm khởi tạo một Tuple:

Nhìn dài dòng vậy thôi chứ thật ra mỗi hàm Create sẽ tương ứng tạo 1 đối tượng kiểu generic Tuple mình đã giới thiệu ở trên.


Đến đây nhiều bạn sẽ thắc mắc Tuple được sử dụng khi nào trong khi đã có struct và class?

  • Trường hợp đầu tiên là khi bạn viết một phương thức và muốn trả về 1 lúc nhiều giá trị. Lúc này Tuple sẽ giúp bạn dễ dàng giải quyết mà không cần phải tạo thêm struct hay class.
  • Trong nhiều trường hợp khác bạn chỉ muốn tạo nhanh 1 đối tượng với 1 vài thuộc tính và chỉ sử dụng 1 lần thôi thì việc dùng struct hoặc class là rất lãng phí, làm chương trình của bạn trở nên dài dòng hơn. Khi đó Tuple được sử dụng như một phương án thay thế tốt hơn vì có sẵn rồi giờ lấy ra dùng thôi không cần khai báo gì nữa.
  • Ngoài ra, Tuple đã override sẵn:
    •  Phương thức Equals (phương thức dùng để so sánh 2 đối tượng).
    •  Phương thức ToString (Phương thức chuyển giá trị đối tượng sang chuỗi).
    •  Phương thức GetHashCode (Phương thức trả về mã băm của một đối tượng, dùng để hỗ trợ so sánh 2 đối tượng).

Từ đó chúng ta chỉ việc sử dụng mà không cần phải viết lại những phương thức này.


Cách sử dụng Tuple

Đầu tiên là khởi tạo một đối tượng Tuple chúng ta có 2 cách:

Cách 1: Thông qua phương thức Create trong lớp Tuple:

// Khởi tạo Tuple thông qua phương thức Create
var MyTuple = Tuple.Create<int, string>(1, "HowKteam");

Ví dụ trên có nghĩa là tạo ra 1 đối tượng (Tuple) có 2 thuộc tính bên trong:

  •  Thuộc tính thứ nhất (Item1) có kiểu dữ liệu là int và khởi tạo giá trị là 1.
  •  Thuộc tính thứ hai (Item2) có kiểu dữ liệu là string và khởi tạo giá trị là “HowKteam”.

Cách 2: Thông qua Constructor của các lớp Generic:

// Khởi tạo Tuple thông qua constructor của các lớp generic
var MyTuple2 = new Tuple<int, string>(2, "Kteam");

Ví dụ này cũng được hiểu tương tự như trên.

  • Khi bạn khởi tạo Tuple có bao nhiêu kiểu dữ liệu thì sẽ có bấy nhiêu thuộc tính Item tương ứng. Hình dưới đây là minh hoạ cho Tuple<T1, T2>:

Ví dụ: in ra giá trị các thuộc tính đã khởi tạo ở trên:

// Lấy giá trị bên trong Tuple
Console.WriteLine(" ID: {0}, Name: {1}",MyTuple.Item1, MyTuple.Item2);

Kết quả khi chạy chương trình là:

Lúc này ta đã hiểu Tuple cũng chỉ là một lớp bình thường đã được định nghĩa sẵn thôi. Vì vậy để giải quyết bài toán trả về nhiều giá trị cùng một lúc ta đơn giản chỉ cần khai báo kiểu trả về là 1 Tuple mà thôi.

Xét ví dụ sau: Viết chương trình trả về 3 giá trị là ngày, tháng, năm hiện tại của hệ thống.

  • Đầu tiên mình sẽ viết phương thức trả về 3 giá trị ngày, tháng, năm:
/// <summary>
/// Phương thức trả về 1 Tuple có 3 thuộc tính (cả 3 đều có kiểu dữ liệu là int)
/// </summary>
/// <returns></returns>

static Tuple<int, int, int> GetCurrentDayMonthYear()
{
DateTime now = DateTime.Now; // lấy ngày giờ hiện tại của hệ thống.
/* Sử dụng Constructor của Tuple<> để trả về hoặc có thể sử dụng phương thức Create đã trình bày ở trên. */
return new Tuple<int, int, int>(now.Day, now.Month, now.Year);
}
  • Trong chương trình chính ta gọi và sử dụng như sau:
/*
 * Mình dùng var để C# tự nhận diện kiểu dữ liệu.
 * Bạn có thể khai báo tường minh kiểu dữ liệu là Tuple<int, int, int>
 */

var now = GetCurrentDayMonthYear();
Console.WriteLine(" Day: {0}, Month: {1}, Year: {2}", now.Item1, now.Item2, now.Item3);
  • Kết quả khi chạy chương trình là:

Các bạn có thể thử không gọi Item1, Item2, Item3 mà sử dụng phương thức ToString() để xem kết quả thế nào nhé!

Lưu ý: Các thuộc tính Item1, Item2, Item3,… là các thuộc tính chỉ đọc nghĩa là bạn chỉ có thể gọi ra để lấy giá trị chứ không thể gán giá trị cho chúng được.


Kết luận

Nội dung bài này giúp các bạn nắm được:

  • Tuple là gì?
  • Cách sử dụng Tuple.

Bài học sau chúng ta sẽ cùng tìm hiểu về ICOLLECTION TRONG C#.

Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.

 


Tài liệu 

Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Tuple trong C# dưới dạng file PDF trong link bên dưới.

Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com

Đừng quên like hoặc +1 Google để ủng hộ Kteam và tác giả nhé! 


Thảo luận

Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần BÌNH LUẬN bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng. 

 

Chia sẻ:
Thảo luận Hỏi và đáp Báo lỗi bài viết
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  
Hủy bỏ   hoặc  

Chiến dịch

Kteam - Howkteam Free Education