Trang chủ Liên hệ

Bài 24 C# cơ bản - Vòng lặp foreach trong lập trình C# cơ bản

CÔNG TY TNHH THIẾT BỊ ĐO LƯỜNG VÀ ĐIỀU KHIỂN 04/03/2023

Nội dung

Để đọc hiểu bài này tốt nhất các bạn nên có kiến thức cơ bản về các phần:

Trong bài học này, chúng ta sẽ cùng tìm hiểu các vấn đề:

Cú pháp và nguyên tắc hoạt động của foreach trong C#

Cấu trúc lặp foreach cho phép chúng ta duyệt 1 mảng hoặc 1 tập hợp (sẽ được trình bày trong bài TỔNG QUAN VỀ COLLECTION TRONG C#).

Một số đặc trưng của foreach:

Cú pháp

foreach (<kiểu dữ liệu> <tên biến tạm> in <tên mảng hoặc tập hợp>)

{

              // Code xử lý        

 }

Trong đó:

Nguyên tắc hoạt động

Foreach cũng có nguyên tắc hoạt động tương tự như các cấu trúc lặp khác cụ thể như sau:

Qua nguyên tắc hoạt động trên ta có thể thấy:

Sử dụng foreach trong C#

Trong C#, có những danh sách, tập hợp mà ta không thể truy xuất đến các phần tử của nó thông qua chỉ số phần tử được (ví dụ như kiểu List – sẽ được trình bày trong bài LIST TRONG C# hoặc các collectiongeneric – sẽ được trình bày trong bài COLLECTION TRONG C# và bài GENERIC TRONG C#).

Trong trường hợp như vậy, để duyệt các danh sách, tập hợp có tính chất như trên thì foreach là lựa chọn tốt nhất.

Chúng ta sẽ tìm hiểu sức mạnh của foreach qua các bài học sau. Còn trong bài học này mình chỉ ví dụ đơn giản để các bạn có thể nắm cú pháp cũng như cách sử dụng foreach.

/*
             * Khai báo mảng 1 chiều IntArray và khởi tạo giá trị.
             * Các bạn có thể xem lại cú pháp này ở bài Mảng 1 chiều trong C#
             * Khai báo 1 biến Sum để chứa giá trị tổng các phần tử trong mảng IntArray.
             */
            int[] IntArray = { 1, 5, 2, 4, 6 };
            int Sum = 0;

            /*
             * Sử dụng foreach để duyệt mảng và in giá trị của các phần tử trong mảng.
             * Đồng thời tận dụng vòng lặp để tính tổng các phần tử trong mảng.
             */
            foreach (int item in IntArray)
            {
                Console.Write("\t" + item);
                Sum += item;
            }

            Console.WriteLine("\n Sum = " + Sum);


Có lẽ chúng ta đã không mấy xa lạ với đoạn chương trình trên. Đoạn chương trình trên sẽ duyệt mảng để in ra các giá trị của mảng và tính tổng các phần tử trong mảng.

Nhưng thay vì sử dụng for thì mình sử dụng foreach để các bạn có thể thấy được sự tương đồng giữa các thành phần trong cấu trúc foreach và CẤU TRÚC VÒNG LẶP FOR TRONG C#.

So sánh for và foreach trong C#

Foreach mang trong mình một số ưu điểm như:

Mặc dù có nhiều ưu điểm nhưng không hẳn là foreach hơn hẵn for. Cùng điểm qua một vài tiêu chí để xem 2 đối thủ này ai hơn ai nhé.

Tiêu chí

For

Foreach

Khả năng truy xuất phần tử

Truy xuất ngẫu nhiên (có thể gọi bất kỳ phần tử nào trong mảng để sử dụng)

Truy xuất tuần tự (chỉ sử dụng được giá trị phần tử đang xét)

Thay đổi được giá trị của các phần tử

Không

Duyệt mảng, tập hợp khi không biết được số phần tử của mảng, tập hợp

Không

Hiệu suất (tốc độ xử lý) (*)

Đối với mảng, danh sách hoặc tập hợp có khả năng truy xuất ngẫu nhiên thì for sẽ chiếm ưu thế

Đối với mảng, danh sách hoặc tập hợp không có khả năng truy xuất ngẫu nhiên thì foreach chiếm ưu thế

(*) Nhìn chung hiệu suất của for và foreach còn phụ thuộc vào cấu trúc dữ liệu đang xét cho nên việc so sánh này chỉ mang tính chất tham khảo.

Sau đây là 2 đoạn chương trình kiểm tra tốc độ của for và foreach đối với 2 cấu trúc dữ liệu là mảng 1 chiều (có khả năng truy xuất ngẫu nhiên) và danh sách liên kết LinkedList (không có khả năng truy xuất ngẫu nhiên):

Đầu tiên là mảng 1 chiều:

Code:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;

namespace Bai_24_01
{
    class Program
    {
        static void Main(string[] args)
        {
            //Kiem tra toc do for
            Stopwatch DH1 = new Stopwatch();
            DH1.Start();
            int[] MangSL = new int[Int32.MaxValue / 100];
            int s = 0;
            int Length = MangSL.Length;
            for (int i=0;i<Length;i++)
            {
                s += MangSL[i];
            }
            DH1.Stop();
            Console.WriteLine("Thoi gian chay vong for : {0} giay {1} mili giay ", DH1.Elapsed.Seconds, DH1.Elapsed.Milliseconds);

            //Kiem tra toc do foreach
            Stopwatch DH2 = new Stopwatch();
            DH2.Start();
            int[] MangSL2 = new int[Int32.MaxValue / 100];
            int S2 = 0;
            foreach (int Item in MangSL2)
            {
                S2 += Item;
            }
            DH2.Stop();
            Console.WriteLine("Thoi gian chay vong foreach : {0} giay {1} mili giay ", DH2.Elapsed.Seconds, DH2.Elapsed.Milliseconds);
            Console.ReadKey();
        }
    }
}

Kết luận

Nội dung bài này giúp các bạn nắm được:

Bài sau chúng ta sẽ tìm hiểu về LỚP STRING TRONG C#.

Bài viết liên quan