C ++ sửa đổi danh sách trong khi lặp lại

Vòng lặp vô hạn và tự quản lý điều kiện để dừng vòng lặp xử lý sau khi bạn đã xử lý mọi thứ ở đó khi bạn bắt đầu xử lý và mọi thứ trong hàng đợi từ trình theo dõi hệ thống tệp

 

 

 

"murthybsn" đã viết trong tin nhắn. 8ba90f2c-8217-4522-be20-291ef991c3b1

Xin chào ppl,

Tôi đang phát triển một ứng dụng cửa sổ nhỏ. Nó có một trình xem tập tin

Trình theo dõi tệp xem một thư mục "C. \Temp" Bất cứ khi nào tệp kiểm tra được đặt trong thư mục đó, tôi sẽ in tất cả các tệp ngoại trừ tệp kiểm tra bằng quy trình. bắt đầu[]

Vì vậy, vấn đề của tôi là trong khi lặp lại tất cả các tệp trong thư mục để xử lý bản in, có một dịch vụ khác sẽ đặt thêm một số tệp trong cùng một thư mục

Bài đăng này sẽ thảo luận về cách xóa các phần tử khỏi danh sách trong C # thỏa mãn điều kiện đã cho trong khi lặp lại nó

Vấn đề. Chúng tôi không thể lặp lại danh sách và chỉ cần xóa các phần tử khỏi danh sách đó

Lý do. Di chuyển về phía trước trong danh sách bằng cách sử dụng vòng lặp for và xóa các phần tử khỏi danh sách có thể khiến bạn bỏ qua một số phần tử. Nói cách khác, khi phần tử thứ i của danh sách bị xóa, phần tử được định vị ở chỉ mục tiếp theo sẽ trở thành phần tử thứ i mới. Bây giờ trong lần lặp tiếp theo của vòng lặp for, vì chỉ số i được tăng lên, nên phần tử thứ i chưa được xử lý sẽ bị bỏ qua

Điều này là hiển nhiên từ ví dụ sau, trong đó đầu ra dự kiến ​​sẽ trống, nhưng đầu ra thực tế là [2,4,6,8,10]

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

sử dụng Hệ thống;

sử dụng Hệ thống. Bộ sưu tập. Chung;

sử dụng Hệ thống. Linq;

 

lớp công khai Ví dụ

{

    công khai tĩnh vô hiệu Chính[]

    {

        Danh sách list = new List[Enumerable.Phạm vi[1, 10]];

 

        cho [int i = 0; i = 0; i--]

        {

            nếu [danh sách[i] % 2 == 0] {    // remove even elements

                danh sách. RemoveAt[i];

            }

        }

 

        Bảng điều khiển. WriteLine[Chuỗi. Tham gia[',', list]];

    }

}

 

/*

đầu ra. 1,3,5,7,9

*/

Tải xuống Chạy mã

2. Sử dụng phương pháp List.Reverse[]

Một giải pháp khác để giải quyết vấn đề trên là lặp qua một bản sao ngược của danh sách bằng cách sử dụng vòng lặp foreach. Ví dụ mã sau đây cho thấy cách triển khai điều này bằng cách sử dụng phương thức Reverse[] của LINQ.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

sử dụng Hệ thống;

sử dụng Hệ thống. Bộ sưu tập. Chung;

sử dụng Hệ thống. Linq;

 

lớp công khai Ví dụ

{

    công khai tĩnh vô hiệu Chính[]

    {

        Danh sách list = new List[Enumerable.Phạm vi[1, 10]];

 

        foreach [int item in list.Đảo ngược[]]

        {

            if [mục % 2 == 0] {    // remove even elements

                danh sách. Xóa[mục];

            }

        }

 

        Bảng điều khiển. WriteLine[Chuỗi. Tham gia[',', list]];

    }

}

 

/*

đầu ra. 1,3,5,7,9

*/

Tải xuống mã

3. chỉ số giảm dần

Chúng ta cũng có thể giảm chỉ số i trong vòng lặp khi phần tử i'th bị xóa khỏi danh sách. Bây giờ, phần tử i'th sẽ không bị bỏ qua

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

sử dụng Hệ thống;

sử dụng Hệ thống. Bộ sưu tập. Chung;

sử dụng Hệ thống. Linq;

 

lớp công khai Ví dụ

{

    công khai tĩnh vô hiệu Chính[]

    {

        Danh sách list = new List[Enumerable.Phạm vi[1, 10]];

 

        cho [int i = 0; i

Chủ Đề