Foreach

ชลันธร การดำริห์ 650710535

Looping ในภาษาโปรแกรมคือวิธีการดำเนินการคำสั่งหรือชุดของคำสั่งซ้ำหลายครั้งขึ้นอยู่กับเงื่อนไขที่ใช้ โดยเงื่อนไขต้องเป็นจริงเพื่อทำการวนซ้ำ (loop)

Foreach Loop ใน C#

การ loop แบบ foreach ในภาษา C# จะเป็นการวนซ้ำผ่าน Element(องค์ประกอบ) ของ Collection โดยทั่วไปจะใช้กับ colletion ที่เป็น IEnumerable โดยอาจเป็น array หรือ list โดยจะดำเนินการคำสั่งที่กำหนดไว้กับแต่ละ element ที่มีอยู่ในอาเรย์นั้นทีละตัว

flowchart การทำงานของ foreach

ภาพจาก geeksforgeeks.org

หลักการทำงานของ foreach จาก flowchart

เมื่อเริ่มต้น(start) โปรแกรมจะทำการตรวจสอบองค์ประกอบใน collection ว่ามีองค์ประกอบใดยังไม่ประมวลผลหรือไม่ หากมีจำดำเนินการนำค่าที่ยังไม่ได้ประมวลผลมาใช้ และทำงานตามคำสั่งในstatement และทำการวนซ้ำ จนกว่าจะไม่มีค่าองค์ประกอบใน collection แล้วจึง หยุดการทำงาน(stop)

Syntax foreach ใน ภาษา C#

องค์ประกอบหลัก

  • data_type คือ type ของข้อมูลใน collection ที่ต้องการวนซ้ำ เช่น int char string เป็นต้น

  • var_name คือ ชื่อตัวแปรที่สร้างขึ้นเพื่อใช้อ้างถึงองค์ประกอบ ใน collection ในระหว่างการวนซ้ำ

  • collection_variable คือ ตัวแปรของ collection ที่คุณต้องการวนซ้ำ

  • statement คือ คำสั่งที่ต้องการให้โปรแกรมทำงานใน loop

การใช้ foreach loop ใน C# เบื้องต้น

  • ต้องใส่คำสั่งของ loop ไว้ในปีกา { statement }

  • ประกาศตัวแปรประเภทเดียวกับ collection แทนที่จะประกาศตัวนับ(loop counter)

ในอีกกรณี เราสามารถประกาศประเภทของตัวแปรเป็น var ได้ โดยไม่ต้องระบุประเภทอย่างชัดเจน compiler จะทำการอนุมานตัวแปรให้โดยอัตโนมัติ

  • สามารถใช้ตัวแปรที่สร้างขึ้นมาใหม่ แทนการเข้าถึงองค์ประกอบได้ด้วยค่า ดัชนี

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

ผลลัพธ์

ant

bird

lion

tiger

อธิบายการทำงานของโปรแกรมตัวอย่าง

  1. เมื่อเริ่มต้น loop ขั้นตอนแรกโปรแกรมจะทำการตรวจสอบค่า ในcollection animals ว่ามีองค์ประกอบใดยังไม่ถูกประมวลผลบ้างซึ่งในครั้งแรก จะพบว่าทุกองค์ประกอบใน animals ยังไม่ถูกประมวลผล คือ("ant", "bird", "lion", "tiger")

  2. หลังจากนั้นจะทำการนำค่าแรกซึ่งคือ 'ant' มาประมวลผลโดยการนำค่ามาเก็บในตัวแปรที่สร้างใหม่คือ animal และทำการประมวลผลใน statement ซึ่งจำทำการพิมพ์ค่าขององค์ประกอบนั้นออกมา คือ 'ant'

  3. หลังจากนั้นจะทำการวนไปเชคในขั้นตอนแรกซึ่งคือตรวจสอบค่าที่ยังไม่ถูกประมวลผลและนำมาใช้ซ้ำไปเรื่อยๆจนเมื่อตรวจสอบว่าไม่มีองค์ประกอบที่ยังไม่ถูกประมวลผลเหลือในcollection แล้วจึงหยุดการทำงานของ loop

ทั้งนี้ โครงสร้าง(structure) foreach ยังสามารถใช้ได้ใน collection อื่นๆอีก เช่น list หรือdictionary

ตัวอย่าง

การใช้foreach กับ list และ array มีรูปแบบการประกาศตัวแปรที่เหมือนกัน แม้ว่าจะมีประเภทข้อมูลที่แตกต่างกัน

Skip and Break of foreach

Skip ข้ามการทำงานใน loop

เราสามารถใช้คำสั่ง 'continue' ร่วมกับคำสั่งควบคุม เช่น if-else เพื่อกำหนดเงื่อนไขใน statement เพื่อข้ามการทำงานหรือการวนซ้ำได้

ผลลัพธ์

bird

lion

tiger

Break หยุดการทำงานใน loop

เราสามารถใช้คำสั่ง 'break' ร่วมกับคำสั่งควบคุม เช่น if-else เพื่อกำหนดเงื่อนไขใน statement เพื่อหยุดการทำงานหรือการวนซ้ำได้

ผลลัพธ์

ant

bird

ข้อจำกัดการใช้งาน foreach loop ของC#

  • การใช้ foreach loop ไม่เหมาะสมกับการแก้ไขข้อมูลใน array เนื่องจากออกแบบมาสำหรับอ่านเท่านั้น

  • foreach loop ไม่มีการติดตามค่า ดัชนี (index) จึงไม่สามารถนำค่า ดัชนีมาใช้ได้

  • foreach loop จะทำงานไปข้างหน้าทีละครั้งเท่านั้น ไม่สามารถย้อนกลับได้

foreach loop จะทำการดำเนินไปข้างหน้าทีละหนึ่งครั้งเท่านั้น และจะไม่สามารถย้อนกลับหรือเปลี่ยนตำแหน่งของ loop ที่ต้องการจะไปได้

เปรียบเทียบ foreach ใน C, Java ,python

JAVA foreach loop

ใน Java มีโครงสร้าง Foreach สำหรับวนซ้ำข้อมูลใน collection คล้ายกับใน C#

โดยในภาษาjava จะใช้keyword 'for' ในการใช้งาน หลังจากนั้นจะทำการประกาศตัวแปร และcollection โดยคั่นด้วย colon(:)

syntax

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

ผลลัพธ์

10 50 60 80 90

ข้อจำกัด

  • การใช้ foreach loop ไม่เหมาะสมกับการแก้ไขข้อมูลใน array เนื่องจากออกแบบมาสำหรับอ่านเท่านั้น

  • foreach loop ไม่มีการติดตามค่า ดัชนี (index) จึงไม่สามารถนำค่า ดัชนีมาใช้ได้

  • foreach loop จะทำงานไปข้างหน้าทีละครั้งเท่านั้น

  • foreach loop ไม่สามารถประมวลผลคำสั่งตัดสินใจสองคำสั่งพร้อมกันได้

สรุป

การใช้งาน foreach ในภาษาjava มีความคล้ายกับ C# ในเรื่องการใช้งาน และมีข้อจำกัดหลัก ๆ ที่เหมือนกัน คือ การใช้ foreach loop ไม่เหมาะสมกับการแก้ไขข้อมูลใน array หรือ collection foreach loop ไม่ได้ติดตามค่า ดัชนี (index) จึงไม่สามารถนำค่า ดัชนีมาใช้ได้ และ จะทำงานไปข้างหน้าทีละครั้งเท่านั้น

Python foreach Loop

ใน Python ไม่มีคำสั่ง foreach แต่สามารถใช้คำสั่ง for ในการวนลูป element ใน collection แต่จะใช้กับ collection Iterable ซึ่งทำหน้าที่เหมือน foreach ในภาษาอื่นๆ

syntax

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

ผลลัพธ์

ant

bird

lion

tiger

ข้อจำกัด

มีข้อจำกัดเรื่องการทำงานไปข้างทีละครั้งเหมือนกัน

แต่ python ไม่มีข้อจำกัดเรื่องการเข้าถึง index แบบเดียวกับ C# เนื่องจาก python มีฟังก์ชั่น enumerate() ซึ่งช่วยติดตามค่า index

และ python สามารถประกาศตัวแปรที่ใช้ได้โดยไม่ต้องระบุชนิดข้อมูลได้ เนื่องจากเป็น dynamic typing

ตัวอย่าง enumerate()

ผลลัพธ์

0 lion

1 tiger

2 choper

สรุป

python สามารถใช้การวนซ้ำผ่าน collection ได้เหมือนกัน โดยจะมีข้อจำกัดบางข้อที่เหมือนกัน เช่น การทำงานแบบทีละครั้ง และจะมีข้อจำกัดบางอย่างที่แตกต่าง เช่น python สามารถประกาศตัวแปรที่ใช้ได้โดยไม่ต้องระบุชนิดข้อมูลได้ python สามารถติดตามค่าดัชนีได้ ผ่านการใช้ฟังก์ชั่น enumerate()

C foreach Loop

ในภาษา C ไม่มีคำสั่งสำหรับการ foreach โดยตรง ต้องใช้การลูปอื่น เช่น for loop เพื่อวนรอบข้อมูลผ่าน collection ได้

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

ผลลัพธ์

1

2

3

4

5

สรุป

จากการใช้ loop for ทำให้เห็นได้ว่าสามารถเข้าถึง index ของข้อมูลได้ และสามารถแก้ไขข้อมูลได้ หรือแก้ไขการนับของloop ได้ทำให้ไม่มีข้อจำกัดเช่นเดียวกับ foreach ของ C# ซึ่งยืดหยุ่นสูงกว่า แต่จะสังเกตุได้ว่า code ที่ได้ยากและซับซ้อนกว่า เมื่อเปรียบเทียบกับ foreach ของ C#

สรุปความแตกต่างระหว่าง For loop กับ Foreach loop

  • For loop จะทำงานตามคำสั่งจนกว่าเงื่อนไขที่กำหนดจะเป็นเท็จ ในขณะที่ foreach loop จะทำงานตามคำสั่งสำหรับแต่ละองค์ประกอบที่มีอยู่ในอาร์เรย์ โดยไม่จำเป็นต้องกำหนดขีดจำกัดขั้นต่ำหรือสูงสุด

  • ใน for loop เราสามารถวนซ้ำอาร์เรย์ได้ทั้งในทิศทางไปข้างหน้าและถอยหลัง foreach loop เช่น จากดัชนี 0 ถึง 9 และจากดัชนี 9 ไป 0 เราจะวนซ้ำอาร์เรย์ได้เพียงในทิศทางไปข้างหน้าเท่านั้น

  • Foreach loop จะทำการคัดลอกอาร์เรย์และนำสำเนานั้นไปใช้ในการดำเนินการ ในขณะที่ for loop จะทำงานกับอาร์เรย์เดิมโดยไม่ทำการคัดลอกข้อมูลใด ๆ

กรณีที่เหมาะสมกับการใช้ foreach ในการทำงาน

  • เมื่อต้องการอ่านค่าจาก collection เท่านั้นโดยไม่ต้องการเปลี่ยนแปลงค่า

  • ต้องการวนซ้ำข้อมูลผ่านทุกองค์ประกอบของ collection

  • ไม่มีการจัดการกับดัชนีตัวแปร ซึ่งช่วยลดความซับซ้อนในการเขียน

SLIDE PRESENTATION

694KB
Open

VIDEO PRESENTATION

REFERENCE

C#

GeeksforGeeks. (2019, August 6). C# foreach loop. GeeksforGeeks. https://www.geeksforgeeks.org/c-sharp-foreach-loop/

Microsoft. (2023, March 14). Implicitly typed local variables. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed-local-variables

Microsoft. (n.d.). IEnumerable interface. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/api/system.collections.ienumerable?view=net-8.0

Microsoft. (2023, November 15). Iteration statements - for, foreach, do, and while. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/iteration-statements

Ravikiran, A. S. (2024, October 11). Mastering foreach in C#. Simplilearn. https://www.simplilearn.com/tutorials/c-sharp-tutorial/c-sharp-foreach

Python

GeeksforGeeks. (2024, September 13). For loops in Python. GeeksforGeeks.https://www.geeksforgeeks.org/python-for-loops/

GeeksforGeeks. (2023, September 11). How to access index in Python’s for loop. GeeksforGeeks.https://www.geeksforgeeks.org/how-to-access-index-in-pythons-for-loop/

w3schools. (n.d.). Python iterators. W3Schools.https://www.w3schools.com/python/python_iterators.asp

Java

GeeksforGeeks. (2024, October 04). For-each loop in Java. GeeksforGeeks.https://www.geeksforgeeks.org/for-each-loop-in-java/

C

GeeksforGeeks. (2023, June 28). C for Loop. GeeksforGeeks.

https://www.geeksforgeeks.org/c-for-loop/

Last updated