Cách xác định lần lặp đầu tiên và cuối cùng trong vòng lặp foreach C#

Tôi có một vòng lặp

Item last = Model.Results.Last[];
// do something with last
0 và cần thực thi một số logic khi mục cuối cùng được chọn từ
Item last = Model.Results.Last[];
// do something with last
1, e. g

 foreach [Item result in Model.Results]
 {
      //if current result is the last item in Model.Results
      //then do something in the code
 }

Tôi có thể biết vòng lặp nào cuối cùng mà không sử dụng vòng lặp for và bộ đếm không?

Giải pháp tốt nhất

Nếu bạn chỉ cần làm điều gì đó với phần tử cuối cùng [trái ngược với điều gì đó khác với phần tử cuối cùng thì sử dụng LINQ sẽ giúp ích ở đây

Item last = Model.Results.Last[];
// do something with last

Nếu bạn cần làm điều gì đó khác với phần tử cuối cùng thì bạn cần một cái gì đó như

Item last = Model.Results.Last[];
foreach [Item result in Model.Results]
{
    // do something with each item
    if [result.Equals[last]]
    {
        // do something different with the last item
    }
    else
    {
        // do something different with every item but the last
    }
}

Mặc dù bạn có thể cần phải viết một bộ so sánh tùy chỉnh để đảm bảo rằng bạn có thể biết rằng mặt hàng đó giống với mặt hàng được trả về bởi

Item last = Model.Results.Last[];
// do something with last
2

Cách tiếp cận này nên được sử dụng một cách thận trọng vì

Item last = Model.Results.Last[];
// do something with last
3 cũng có thể phải lặp qua bộ sưu tập. Mặc dù đây có thể không phải là vấn đề đối với các bộ sưu tập nhỏ, nhưng nếu nó trở nên lớn thì nó có thể ảnh hưởng đến hiệu suất. Nó cũng sẽ thất bại nếu danh sách chứa các mục trùng lặp. Trong trường hợp này, một cái gì đó như thế này có thể phù hợp hơn

int totalCount = result.Count[];
for [int count = 0; count < totalCount; count++]
{
    Item result = Model.Results[count];

    // do something with each item
    if [[count + 1] == totalCount]
    {
        // do something different with the last item
    }
    else
    {
        // do something different with every item but the last
    }
}

Giải pháp liên quan

C# – Cách lấy chỉ mục của lần lặp hiện tại của vòng lặp foreach

Ian Mercer đã đăng một giải pháp tương tự như thế này trên blog của Phil Haack

________số 8

Điều này giúp bạn có được mục [

Item last = Model.Results.Last[];
// do something with last
4] và chỉ mục của nó [
Item last = Model.Results.Last[];
// do something with last
5] bằng cách sử dụng quá tải này của LINQ's
Item last = Model.Results.Last[];
// do something with last
6

tham số thứ hai của hàm [bên trong Chọn] đại diện cho chỉ mục của phần tử nguồn

Item last = Model.Results.Last[];
// do something with last
7 đang tạo một đối tượng ẩn danh mới

Có thể tránh phân bổ heap bằng cách sử dụng

Item last = Model.Results.Last[];
// do something with last
8 nếu bạn đang sử dụng C# 7. 0 trở lên

Item last = Model.Results.Last[];
// do something with last
4

Bạn cũng có thể loại bỏ

Item last = Model.Results.Last[];
// do something with last
9 bằng cách sử dụng tính năng hủy tự động

Item last = Model.Results.Last[];
// do something with last
6

C# – Các đối tượng nhân bản sâu

Trong khi một cách tiếp cận là triển khai giao diện

Item last = Model.Results.Last[];
foreach [Item result in Model.Results]
{
    // do something with each item
    if [result.Equals[last]]
    {
        // do something different with the last item
    }
    else
    {
        // do something different with every item but the last
    }
}
0 [được mô tả, vì vậy tôi sẽ không lặp lại], đây là một trình sao chép đối tượng nhân bản sâu tuyệt đẹp mà tôi đã tìm thấy trên The Code Project cách đây một thời gian và tích hợp nó vào mã của chúng tôi. Như đã đề cập ở nơi khác, nó yêu cầu các đối tượng của bạn phải được tuần tự hóa

Item last = Model.Results.Last[];
// do something with last
8

Ý tưởng là nó tuần tự hóa đối tượng của bạn và sau đó giải tuần tự hóa nó thành một đối tượng mới. Lợi ích là bạn không phải lo lắng về việc sao chép mọi thứ khi một đối tượng trở nên quá phức tạp

Trong trường hợp bạn thích sử dụng các phương thức mở rộng mới của C# 3. 0, thay đổi phương thức để có chữ ký sau

Item last = Model.Results.Last[];
// do something with last
9

Bây giờ cuộc gọi phương thức đơn giản trở thành

Item last = Model.Results.Last[];
foreach [Item result in Model.Results]
{
    // do something with each item
    if [result.Equals[last]]
    {
        // do something different with the last item
    }
    else
    {
        // do something different with every item but the last
    }
}
1

CHỈNH SỬA [ngày 10 tháng 1 năm 2015] Tôi nghĩ rằng tôi nên xem lại điều này, đề cập đến việc gần đây tôi đã bắt đầu sử dụng [Newtonsoft] Json để làm điều này, nó sẽ nhẹ hơn và tránh được chi phí của các thẻ [Serializable]. [NB @atconway đã chỉ ra trong các nhận xét rằng các thành viên riêng tư không được sao chép bằng phương thức JSON]

Làm cách nào để xác định lần lặp đầu tiên và lần cuối cùng trong vòng lặp foreach?

Sử dụng biến bộ đếm và kiểm tra khi giá trị bộ đếm bằng 0 thì đó là lần lặp đầu tiên và khi giá trị bộ đếm là độ dài 1 thì đó là lần lặp cuối cùng .

Làm cách nào để xác định lần lặp đầu tiên và cuối cùng trong vòng lặp foreach trong laravel?

Biến này cung cấp quyền truy cập vào một số bit thông tin hữu ích, chẳng hạn như chỉ mục vòng lặp hiện tại và đây là lần lặp đầu tiên hay cuối cùng của vòng lặp. .
@foreach [$user là $user]
@if [$loop->first]
Đây là lần lặp đầu tiên
@endif
@if [$loop->last]
Đây là lần lặp lại cuối cùng
@endif

Làm cách nào để kiểm tra lần lặp cuối cùng của vòng lặp trong js?

pre> const chain = ['ABC', 'BCA', 'CBA']; . }

Làm cách nào để kiểm tra phần tử cuối cùng trong vòng lặp Java?

Bạn chỉ cần kiểm tra biến chạy của mình. if[i == 999] . Lưu câu trả lời này.

Chủ Đề