Bài 1: Giới thiệu về Trình quản lý quảng cáo
BÀI GIẢNG C#: COLLECTIONS VÀ DANH SÁCH (LIST)
1. Giới thiệu về Collections trong C#
Trong C#, Collections là tập hợp các đối tượng có thể lưu trữ và quản lý dữ liệu một cách linh hoạt. Một trong những kiểu phổ biến nhất là List<T>, cung cấp các phương thức mạnh mẽ để thao tác với dữ liệu.
2. List trong C#
2.1. List là gì?
List<T>là một danh sách động, có thể chứa các phần tử của một kiểu dữ liệu cụ thể (T).- Không giống như mảng (
array),List<T>có thể tự động thay đổi kích thước khi thêm hoặc xóa phần tử.
👉 Cú pháp khai báo:
List<T> tenDanhSach = new List<T>();
Ví dụ với kiểu int:
List<int> numbers = new List<int>();
Ví dụ với kiểu string:
List<string> names = new List<string>();
2.2. Thêm phần tử vào List
Dùng phương thức Add() để thêm một phần tử vào danh sách.
List<int> numbers = new List<int>();
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
Console.WriteLine(string.Join(", ", numbers)); // Output: 10, 20, 30
✅ Thêm nhiều phần tử cùng lúc bằng AddRange()
List<int> moreNumbers = new List<int> { 40, 50, 60 };
numbers.AddRange(moreNumbers);
Console.WriteLine(string.Join(", ", numbers)); // Output: 10, 20, 30, 40, 50, 60
2.3. Truy cập phần tử trong List
- Truy cập theo chỉ mục:
Console.WriteLine(numbers[1]); // Output: 20
- Duyệt danh sách bằng
foreach
foreach (var num in numbers)
{
Console.Write(num + " "); // Output: 10 20 30 40 50 60
}
- Duyệt danh sách bằng
for
for (int i = 0; i < numbers.Count; i++)
{
Console.Write(numbers[i] + " ");
}
📌 Count dùng để lấy số lượng phần tử trong danh sách.
2.4. Cập nhật phần tử trong List
Thay đổi giá trị tại một vị trí cụ thể:
numbers[1] = 25;
Console.WriteLine(string.Join(", ", numbers)); // Output: 10, 25, 30, 40, 50, 60
2.5. Xóa phần tử khỏi List
- Xóa phần tử theo giá trị:
numbers.Remove(25);
Console.WriteLine(string.Join(", ", numbers)); // Output: 10, 30, 40, 50, 60
- Xóa phần tử theo vị trí:
numbers.RemoveAt(0);
Console.WriteLine(string.Join(", ", numbers)); // Output: 30, 40, 50, 60
- Xóa tất cả phần tử:
numbers.Clear();
Console.WriteLine(numbers.Count); // Output: 0
2.6. Tìm kiếm trong List
- Kiểm tra xem phần tử có tồn tại không (
Contains)
if (numbers.Contains(40))
Console.WriteLine("Danh sách có chứa số 40");
- Tìm vị trí phần tử (
IndexOf)
int index = numbers.IndexOf(50);
Console.WriteLine(index); // Output: 2
- Tìm phần tử thỏa điều kiện (
Find)
int result = numbers.Find(x => x > 30);
Console.WriteLine(result); // Output: 40
- Tìm tất cả phần tử thỏa điều kiện (
FindAll)
List<int> greaterThan30 = numbers.FindAll(x => x > 30);
Console.WriteLine(string.Join(", ", greaterThan30)); // Output: 40, 50, 60
2.7. Sắp xếp List
- Sắp xếp tăng dần (
Sort)
numbers.Sort();
Console.WriteLine(string.Join(", ", numbers));
- Sắp xếp giảm dần
numbers.Sort((a, b) => b.CompareTo(a));
Console.WriteLine(string.Join(", ", numbers));
- Đảo ngược danh sách (
Reverse)
numbers.Reverse();
Console.WriteLine(string.Join(", ", numbers));
3. Các thao tác với List đối tượng
3.1. Thêm đối tượng vào List
Có 2 cách để thêm đối tượng vào danh sách:
✅ Cách 1: Dùng Add() để thêm từng sinh viên
danhSachSinhVien.Add(new SinhVien(1, "Nguyễn Văn A", 8.5));
danhSachSinhVien.Add(new SinhVien(2, "Trần Thị B", 7.2));
danhSachSinhVien.Add(new SinhVien(3, "Lê Văn C", 9.0));
✅ Cách 2: Dùng AddRange() để thêm nhiều sinh viên cùng lúc
danhSachSinhVien.AddRange(new List<SinhVien>
{
new SinhVien(4, "Phạm Thị D", 6.8),
new SinhVien(5, "Hoàng Văn E", 7.5)
});
3.2. Hiển thị danh sách sinh viên
Duyệt danh sách bằng vòng lặp foreach:
foreach (SinhVien sv in danhSachSinhVien)
{
sv.HienThi();
}
👉 Output:
ID: 1, Họ tên: Nguyễn Văn A, Điểm: 8.5
ID: 2, Họ tên: Trần Thị B, Điểm: 7.2
ID: 3, Họ tên: Lê Văn C, Điểm: 9.0
ID: 4, Họ tên: Phạm Thị D, Điểm: 6.8
ID: 5, Họ tên: Hoàng Văn E, Điểm: 7.5
3.3. Tìm kiếm trong List đối tượng
🔹 Tìm sinh viên theo ID (Find())
SinhVien svTim = danhSachSinhVien.Find(sv => sv.ID == 2);
if (svTim != null)
svTim.HienThi();
else
Console.WriteLine("Không tìm thấy sinh viên.");
👉 Output:
ID: 2, Họ tên: Trần Thị B, Điểm: 7.2
🔹 Tìm tất cả sinh viên có điểm >= 8 (FindAll())
List<SinhVien> svGioi = danhSachSinhVien.FindAll(sv => sv.Diem >= 8);
Console.WriteLine("Danh sách sinh viên giỏi:");
foreach (SinhVien sv in svGioi)
{
sv.HienThi();
}
👉 Output:
Danh sách sinh viên giỏi:
ID: 1, Họ tên: Nguyễn Văn A, Điểm: 8.5
ID: 3, Họ tên: Lê Văn C, Điểm: 9.0
3.4. Cập nhật thông tin trong List
Giả sử cần cập nhật điểm của sinh viên có ID = 3:
SinhVien svUpdate = danhSachSinhVien.Find(sv => sv.ID == 3);
if (svUpdate != null)
{
svUpdate.Diem = 9.5;
Console.WriteLine("Cập nhật thành công!");
svUpdate.HienThi();
}
👉 Output:
Cập nhật thành công!
ID: 3, Họ tên: Lê Văn C, Điểm: 9.5
3.5. Xóa phần tử khỏi List
🔹 Xóa theo ID
danhSachSinhVien.RemoveAll(sv => sv.ID == 2);
Console.WriteLine("Danh sách sau khi xóa sinh viên có ID = 2:");
foreach (SinhVien sv in danhSachSinhVien)
{
sv.HienThi();
}
👉 Output: (Sinh viên có ID = 2 đã bị xóa)
ID: 1, Họ tên: Nguyễn Văn A, Điểm: 8.5
ID: 3, Họ tên: Lê Văn C, Điểm: 9.5
ID: 4, Họ tên: Phạm Thị D, Điểm: 6.8
ID: 5, Họ tên: Hoàng Văn E, Điểm: 7.5
3.6. Sắp xếp List đối tượng
🔹 Sắp xếp theo điểm tăng dần
danhSachSinhVien.Sort((a, b) => a.Diem.CompareTo(b.Diem));
Console.WriteLine("Danh sách sau khi sắp xếp theo điểm:");
foreach (SinhVien sv in danhSachSinhVien)
{
sv.HienThi();
}
🔹 Sắp xếp theo điểm giảm dần
danhSachSinhVien.Sort((a, b) => b.Diem.CompareTo(a.Diem));
4. Tổng kết
| Phương thức | Chức năng |
|---|---|
Add(T item) |
Thêm phần tử vào List |
AddRange(IEnumerable<T>) |
Thêm nhiều phần tử |
Remove(T item) |
Xóa phần tử theo giá trị |
RemoveAt(int index) |
Xóa phần tử theo chỉ mục |
Clear() |
Xóa toàn bộ danh sách |
Contains(T item) |
Kiểm tra phần tử có tồn tại không |
IndexOf(T item) |
Tìm vị trí phần tử |
Find(Predicate<T>) |
Tìm phần tử đầu tiên thỏa mãn điều kiện |
FindAll(Predicate<T>) |
Tìm tất cả phần tử thỏa mãn điều kiện |
Sort() |
Sắp xếp danh sách |
Reverse() |
Đảo ngược danh sách |
Viết chương trình C# để quản lý danh sách nhân viên trong công ty bằng List<NhanVien>.
1. Yêu cầu:
-
Tạo lớp
NhanVienvới các thuộc tính:ID(int) – Mã nhân viên.HoTen(string) – Họ và tên.Luong(double) – Mức lương.- Hàm
HienThi()để in thông tin nhân viên.
-
Chương trình chính (
Main) thực hiện các chức năng:- Thêm nhân viên vào danh sách.
- Hiển thị danh sách nhân viên.
- Tìm kiếm nhân viên theo ID.
- Cập nhật thông tin nhân viên.
- Xóa nhân viên theo ID.
- Sắp xếp danh sách theo lương giảm dần.
2. Nộp bài: file cs học viết trực tiếp trong phần trả lời