30/09/2018, 18:27

Xóa các phần tử trùng nhau trong list

như tiêu đề thì mục đích của đoạn code này của em là muốn xóa các phần tử trùng nhau trong list vậy nó sai ở đâu vậy ạ

String ten;
Console.WriteLine("Nhap vao ten can xoa trong list");
ten = Console.ReadLine();
for (int j = 0; j < listSV.Count; j++) {
    if ( listSV[j].TenSV==ten) {
        listSV.Remove(listSV[j]);
    }
}

ouputSv();
viết 20:42 ngày 30/09/2018

vòng for cho chạy tới listSV.Count ban đầu, mà trong quá trình xóa thì số lượng sv trong list sẽ giảm => j sẽ truy cập phần tử ngoài listSV.

vd ban đầu có 10 sv, j chạy từ 0 tới 9. Xóa 3 sv, còn 7, j lúc này bằng 7, hay truy cập phần tử thứ 8 trong list (listSV[7]) ko có -> lỗi

David Tom viết 20:35 ngày 30/09/2018

vậy phải giải quyết như thế nào hả anh

nó k xóa được cái tiếp theo anh ạ.ví dụ trong list có hai tên :long thì nó chỉ xóa được cái đầu thôi

hơn nữa em tưởng trong list nó sẽ tự động cập nhật Count

viết 20:29 ngày 30/09/2018

cách dễ nhất là tạo 1 cái list mới, kiểm tra từng sv trong list cũ, sv nào có tên khác tên cần xóa thì bỏ sv đó vào list mới. Sau khi làm xong thì gán list cũ = list mới.

David Tom viết 20:37 ngày 30/09/2018

thế sửa 1 phần tử trong list thì làm như thế nào ạ.tìm xong sửa nó ấy ạ

viết 20:29 ngày 30/09/2018

sửa thì viết bình thường thôi. Xóa phần tử trong list thì mới cần tạo list mới cho chắc.

David Tom viết 20:37 ngày 30/09/2018

như nào á.ví dụ mình tìm tên quang và sửa lại thành long còn các thông tin khác giữ nguyên

viết 20:35 ngày 30/09/2018
for (int j = 0; j < listSV.Count; j++)
    if (listSV[j].TenSV == "quang")
        listSV[j].TenSV = "long";
David Tom viết 20:40 ngày 30/09/2018

thế ví dụ muốn sửa toàn bộ tất cả các thông tin thì làm sao hả anh

viết 20:31 ngày 30/09/2018

thì cũng làm tương tự thôi, mà mỗi thông tin viết ra 1 cái phương thức riêng, ví dụ đổi tên thì ChangeName(string), v.v…

BigCat viết 20:31 ngày 30/09/2018

Affter remove element in array call method:

 array.Resize<int >(ref x, ); or array.TrimToSize()
Nguyen Ca viết 20:27 ngày 30/09/2018

Dùng do while thay cho for, nếu xóa được thì không tăng biến đếm, ngược lại thì tăng biến đếm.

Duc viết 20:41 ngày 30/09/2018

If ( !listSV.contains(listSV[j]){
newListSV.add(listSV[j];
}

Bài liên quan
0