Đăng ký để xem nội dung này
Tạo tài khoản miễn phí và đăng ký gói học để truy cập toàn bộ bài học, video và tài liệu độc quyền.
Đăng ký ngay — Miễn phí Đã có tài khoản? Đăng nhậpGenerics và Collections
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