Cho phép sử dụng Aggregate
cho những niềm vui của nó (và cũng để chứng minh điều này có thể được thực hiện như một biểu hiện duy nhất):
"AAAA,12,BBBB,34,CCCC,56".Split(',').Aggregate(
new { Uneven = new List<string>(), Even = new List<string>() },
(seed, s) => {
if (seed.Uneven.Count > seed.Even.Count)
seed.Even.Add(s);
else
seed.Uneven.Add(s);
return seed;
});
Theo LINQPad, kết quả là thế này:
Tất nhiên tôi có lẽ sẽ không làm theo cách này, vì nó rất khó đọc. Và thử nghiệm cho danh sách để thêm vào là, tốt, không đẹp.
Nhưng ít nhất chúng ta có một ví dụ khác là báo cáo lambda - thông thường tài liệu LINQ cố gắng quên chúng (có thể vì chúng sẽ không hoạt động với SQL hoặc bất kỳ chương trình phụ trợ nào khác sử dụng cây biểu thức).
Một lợi thế của phương pháp này trái ngược với các giải pháp làm sạch ở trên là điều này chỉ làm cho một người vượt qua danh sách. Vì chúng tôi đang tách một chuỗi, mặc dù, tôi sẽ cố gắng tối ưu hóa ở một nơi khác;) Sẽ không phải là IEnumerable<string> Split(this string self, string boundary)
được mát mẻ?
Nguồn
2010-09-29 12:46:25
gì là phân vùng của chuỗi dựa trên? Vị trí trong danh sách, số ký tự, v.v ...? –
Có vị trí trong danh sách –
'Tôi muốn tránh vòng lặp' Bạn nhận ra rằng bất kỳ giải pháp LINQ nào bạn quyết định sẽ thực tế, sử dụng ít nhất một vòng lặp? –