C# Cơ bản .NET Core §1 Cài đặt, chương trình C# đầu tiên §2 Biến, kiểu dữ liệu và nhập/xuất §3 Toán tử số học và gán §4 So sánh, logic và lệnh if, switch §5 Vòng lặp for, while §6 Phương thức - Method §7 Chuyển số thành chữ §8 Phương thức - Delegate §9 Lớp - Class §10 Namespace §11 Partial, Nested §12 Kiểu giá trị, tham chiếu §13 Kiểu vô danh và dynamic §14 Biểu thức lambda §15 Event §16 Hàm hủy - Quá tải toán tử - thành viên tĩnh - indexer §17 null và nullable §18 Mảng §19 Chuỗi ký tự §20 Tính kế thừa §21 Phương thức khởi tạo §22 Tính đa hình - abstract - interface §23 Struct và Enum §24 Ngoại lệ Exeption §25 IDisposable - using §26 File cơ bản §27 FileStream §28 Generic §29 Collection - List §30 SortedList §31 Queue / Stack §32 Linkedlist §33 Dictionary - HashSet §34 Phương thức mở rộng §35 ObservableCollection §36 LINQ §37 (Multithreading) async - bất đồng bộ §38 Type §39 Attribute Annotation §40 DI Dependency Injection §41 (Multithreading) Parallel §42 Thư viện lớp §43 (Networking) Uri, Dns, Ping §44 (Networking) HttpClient §45 (Networking) HttpMessageHandler §46 (Networking) HttpListener §47 (Networking) Tcp TcpListenerr/TcpClient §48 (ADO.NET) SqlConnection §49 (ADO.NET) SqlCommand §50 (ADO.NET) DataAdapter §51 (EF Core) Tổng quan §52 (EF Core) Tạo Model §53 (EF Core) Fluent API §54 (EF Core) Query §55 (EF Core) Scaffold §56 (EF Core) Migration §57 (ASP.NET CORE) Hello World! §58 (ASP.NET CORE) Middleware §59 (ASP.NET CORE) Map - Request - Response §60 (ASP.NET CORE) IServiceCollection - MapWhen §61 (ASP.NET CORE) Session - ISession §62 (ASP.NET CORE) Configuration §63 (ASP.NET CORE) Gửi Mail §64 (ASP.NET CORE) SASS/SCSS §65 (ASP.NET CORE) LibMan §66 (ASP.NET RAZOR) Khởi tạo và Route §67 (ASP.NET RAZOR) Cú pháp Razor §68 (ASP.NET RAZOR) Layout trong ASP.NET Core §69 (ASP.NET RAZOR) Partial §70 (ASP.NET RAZOR) ViewComponent §71 (ASP.NET RAZOR) TagHelper §72 (ASP.NET RAZOR) HtmlHelper §73 (ASP.NET RAZOR) PageModel §74 (ASP.NET RAZOR) Model Binding §75 (ASP.NET RAZOR) HTML Form, Validation §76 (ASP.NET RAZOR) Upload File §77 (ASP.NET RAZOR) Entity Framework §78 (ASP.NET RAZOR) Paging §79 (ASP.NET RAZOR) Identity (1) - Register, Login, Logout §80 (ASP.NET RAZOR) Identity (2) Lockout, Reset Password §81 (ASP.NET RAZOR) Identity (3) Google Login §82 (ASP.NET RAZOR) Identity (4) Facebook Login §83 (ASP.NET RAZOR) Identity (5) profile, password, email ... §84 (ASP.NET RAZOR) Identity (6) Role §85 (ASP.NET RAZOR) Identity (7) Role-based Authorization §86 (ASP.NET RAZOR) Identity (8) RoleClaim §87 (ASP.NET RAZOR) Identity (9) Authorization Handler §88 (ASP.NET RAZOR) IAuthorizationService §89 (ASP.NET MVC) Controller - View §90 (ASP.NET MVC) Route §91 (ASP.NET MVC) EF, Identity §92 (ASP.NET MVC) Binding, Validation §93 (ASP.NET MVC) Xây dựng Website(1) §94 (ASP.NET MVC) Xây dựng Website(2) §95 (ASP.NET MVC) Xây dựng Website(3) §96 (ASP.NET MVC) Xây dựng Website(4) §97 (ASP.NET MVC) Giỏ hàng - Cart (5) §98 (ASP.NET MVC) elFinder (5) §99 (ASP.NET MVC) SB Admin (6) §100 (ASP.NET MVC) Kestrel, publish
SortedList (Bài trước)
(Bài tiếp) Linkedlist

Cần sử dụng 2 namspace sau:

using System.Collections;
using System.Collections.Generic;

Hàng đợi Queue trong C#

Hàng đợi là mô hình FIFO (first in, first out - vào trước, ra trước hay đến trước được phục vụ trước), nó giải quyết các bài toán thực tế giống như xếp hàng mua vé máy bay ...

.NET cung cấp lớp Queue<T> để giả quyết giải thuật hàng đợi.

Các phương thức, thuộc tính của Queue

Thành viên Diễn giải
Count Thuộc tính lấy tổng số phần tử trong hàng
Enqueue vào xếp hàng - đưa phần tử vào cuối hàng đợi
Dequeue đọc - và loại ngay phần tử ở đầu hàng đợi - lỗi nếu hàng đợi không có phần tử nào
Peek đọc phần tử đầu hàng đợi

Vi dụ, các hồ sơ cần xử lý của khách hàng gửi đến, ai đến trước được đưa vào danh sách trước - và khi xử lý thì được xử lý trước

public static void testQueue () {

    Queue<string> hoso_canxuly = new Queue<string> ();

    hoso_canxuly.Enqueue ("Hồ sơ A"); // Hồ sơ xếp thứ nhất trong hàng đợi
    hoso_canxuly.Enqueue ("Hồ sơ B"); // Hồ sơ xếp thứ hai
    hoso_canxuly.Enqueue ("Hồ sơ C");


    // Lấy hồ sơ xếp trước xử lý  trước, cho đến hết
    while (hoso_canxuly.Count > 0) {
        var hs = hoso_canxuly.Dequeue();
        Console.WriteLine($"Xử lý {hs}, còn lại {hoso_canxuly.Count}");
    }

}
// KẾT QUẢ
// Xử lý Hồ sơ A, còn lại 2
// Xử lý Hồ sơ B, còn lại 1
// Xử lý Hồ sơ C, còn lại 0

Ngăn xếp Stack C#

Ngăn xếp stack khá giống hàng đợi, nhưng khác đó là LIFO (last in, first out) - vào sau thì ra trước, nó giống như xếp hàng hóa vào các container, vào nhà kho - cái nào đưa vào sau thì khi thảo dỡ lại thực hiện đầu tiên, nó giống như xếp đĩa vào cọc đĩa CD cái nào đưa vào cọc trước sẽ được lấy ra sau ...

Trong C# với .NET nó cung cấp lớp Stack<T> để thực hiện giải thuật này.

Các phương thức, thuộc tính của Stack

Thành viên Diễn giải
Count Thuộc tính lấy tổng số phần tử trong hàng
Push đẩy (thêm) một phần tử vào đỉnh stack
Pop đọc - xóa phần tử đỉnh stack
Peek đọc phần tử đỉnh stack
Contains kiểm tra một phần tử có trong stack hay không

Ví dụ, nhập vào A, B, C thì in ra CBA (vào sau ra trước)

public static void testQueue () {

      Queue<string> hoso_canxuly = new Queue<string> ();

      hoso_canxuly.Enqueue ("Hồ sơ A"); // Hồ sơ xếp thứ nhất trong hàng đợi
      hoso_canxuly.Enqueue ("Hồ sơ B"); // Hồ sơ xếp thứ hai
      hoso_canxuly.Enqueue ("Hồ sơ C");


      // Lấy hồ sơ xếp trước xử lý  trước, cho đến hết
      while (hoso_canxuly.Count > 0) {
        var hs = hoso_canxuly.Dequeue();
        Console.WriteLine($"Xử lý {hs}, còn lại {hoso_canxuly.Count}");
      }
}
// Bốc dỡ Sản phẩm C / còn lại 2
// Bốc dỡ Sản phẩm B / còn lại 1
// Bốc dỡ Sản phẩm A / còn lại 0

Tham khảo mã nguồn: CS024_SomeCollections hoặc tải về ex024

SortedList (Bài trước)
(Bài tiếp) Linkedlist