Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

เมธอด TakeWhile() ใน C#: ดึงองค์ประกอบจนกว่าเงื่อนไขจะเป็นเท็จ

เมธอด TakeWhile() ใน System.Linq ใช้ดึงองค์ประกอบจากจุดเริ่มต้นของลำดับ ต่อเนื่องกัน ตราบใดที่เงื่อนไข (Predicate) ยังคงเป็นจริง จะหยุดทันทีเมื่อพบองค์ประกอบที่ทำให้เงื่อนไขเป็นเท็จ

ความแตกต่างระหว่าง TakeWhile() และ Where()

เมธอดพฤติกรรม
TakeWhile()ดึงจากต้นทางจนกว่าเงื่อนไขจะเป็นเท็จ แล้วหยุดทันที
Where()กรององค์ประกอบทั้งหมดที่ตรงเงื่อนไข ทั่วทั้งลำดับ

ตัวอย่างการใช้งาน

ดึงค่าที่น้อยกว่า 30 ตั้งแต่ต้นอาร์เรย์:

int[] arr = { 25, 40, 65, 70 };
var result = arr.TakeWhile(x => x < 30); // ได้แค่ { 25 } เพราะ 40 ไม่ผ่านเงื่อนไข

โค้ดตัวอย่างสมบูรณ์

using System;
using System.Linq;

public class Demo
{
    public static void Main()
    {
        int[] arr = { 25, 40, 65, 70 };
        
        Console.WriteLine("อาร์เรย์ต้นฉบับ: " + string.Join(", ", arr));
        
        // ดึงค่าตราบใดที่น้อยกว่า 30
        var values = arr.TakeWhile(x => x < 30);
        
        Console.WriteLine("ค่าที่ได้จาก TakeWhile(x < 30):");
        foreach (var v in values)
        {
            Console.WriteLine(v); // แสดงแค่ 25
        }
        
        // ตัวอย่างเพิ่มเติม: ข้อความ
        string[] words = { "apple", "ant", "banana", "cat" };
        var shortWords = words.TakeWhile(w => w.Length <= 3);
        Console.WriteLine("\nคำที่สั้นกว่าหรือเท่ากับ 3 ตัวอักษร (จากต้นทาง):");
        foreach (var w in shortWords) Console.WriteLine(w); // apple, ant
    }
}

ผลลัพธ์

อาร์เรย์ต้นฉบับ: 25, 40, 65, 70
ค่าที่ได้จาก TakeWhile(x < 30):
25

คำที่สั้นกว่าหรือเท่ากับ 3 ตัวอักษร (จากต้นทาง):
apple
ant

รูปแบบที่มีดัชนี (Index)

// Predicate ที่รับดัชนีเป็นพารามิเตอร์ที่สอง
var result = arr.TakeWhile((value, index) => value > index);

หมายเหตุสำคัญ

  • เหมาะสำหรับข้อมูลที่เรียงลำดับแล้วหรือต้องการประมวลผลเฉพาะส่วนต้นทาง
  • หากองค์ประกอบแรกไม่ผ่านเงื่อนไข จะได้ลำดับว่างเปล่า
  • เป็น Lazy Evaluation - ไม่ประมวลผลจนกว่าจะมีการวนลูปหรือเรียก ToList()