Ngôn ngữ LINQ - Toán tử TakeWhile
Phương thức TakeWhile trong LINQ
Phương thức mở rộng TakeWhile trong LINQ trả về các phần tử từ phần tử đầu tiên cho đến khi một phần tử không thỏa mãn điều kiện. Nếu chính phần tử đầu tiên không thỏa mãn điều kiện thì trả về một danh sách trống.
Phương thức TakeWhile có hai phương thức quá tải. Phương thức quả tải đầu tiên chấp nhận kiểu delegate Func<TSource, bool>
và phương thức quá tải thứ hai chấp nhận kiểu delegate Func<TSource, int, bool>
để truyền chỉ mục của một phần tử.
Trong ví dụ sau, phương thức TakeWhile trả về một danh sách mới gồm các phần tử từ đầu cho đến khi nó tìm thấy một phần tử có chiều dài nhỏ hơn 4 ký tự.
IList<string> strList = new List<string>(){ "Three", "Four", "Five", "Hundred" };
var newList = strList.TakeWhile(s => s.Length > 4);
foreach(var str in newList)
Console.WriteLine(str);
Đây là kết quả khi biên dịch và thực thi chương trình:
Three
Trong ví dụ trên, phương thức TakeWhile chỉ trả về phần tử thứ nhất vì phần tử thứ hai không thỏa mãn điều kiện.
Phương thức quá tải thứ hai của TakeWhile truyền vào một chỉ mục của từng phần tử. Ví dụ sau về phương thức TakeWhile lấy các phần tử cho đến khi độ dài của phần tử lớn hơn chỉ mục của nó:
IList<string> strList = new List<string>() { "One", "Two", "Three", "Four", "Five", "Six" };
var newList = strList.TakeWhile((s, i) => s.Length > i);
foreach(var str in newList)
Console.WriteLine(str);
Đây là kết quả khi biên dịch và thực thi chương trình:
One
Two
Three
Four
Trong ví dụ trên, biểu thức lambda bao gồm phần tử và chỉ mục của một phần tử làm tham số. Nó lấy các phần tử cho đến khi độ dài của phần tử lớn hơn chỉ mục của nó.
Lưu ý: Toán tử TakeWhile không hỗ trợ cú pháp truy vấn trong LINQ.