C# foreach loop

By 07/01/2021Tháng Sáu 10th, 2021C#, KIẾN THỨC LẬP TRÌNH

Trong bài này, chúng ta sẽ tìm hiểu về vòng lặp foreach (foreach loop) và cách sử dụng chúng với mảng (array) và tập hợp (collection). 

C# cung cấp một giải pháp thay thế dễ sử dụng và dễ đọc hơn so với vòng lặp for khi làm việc với array và collection.

Cú pháp foreach loop

foreach (element in iterable-item)

{

    // body of foreach loop

}

 

Ở đây iterable-item có thể là array hoặc lớp của tập hợp (class của collection).

foreach loop hoạt động như thế nào?

Từ khoá in được dùng chung với foreach loop để lặp lại iterable-item. Từ khoá sẽ chọn một item trong iterable-item (trong mỗi lần lặp) và lưu chúng trong biến element (phần tử).

Trong lần lặp đầu tiên, item đầu tiên của iterable-item được lưu trữ trong phần tử. Trong lần lặp thứ hai, item thứ hai sẽ được chọn và tiếp tục lưu trong phần tử và tương tự cho các lần lặp tiếp theo. 

Số lần foreach loop thực thi sẽ bằng số phần tử trong mảng (array) và tập hợp (collection).

Dưới đây là một ví dụ về việc lặp qua mảng sử dụng for loop:

Ví dụ 1: In mảng sử dụng for loop

using System;

 

namespace Loop

{

    class ForLoop

    {

        public static void Main(string[] args)

        {

            char[] myArray = {‘H’,‘e’,‘l’,‘l’,‘o’};

 

            for(int i = 0; i < myArray.Length; i++)

            {

                Console.WriteLine(myArray[i]);

            }

        }

    }

}

 

Tương tự chúng ta có thể thực hiện với foreach loop.

Ví dụ 2: In mảng sử dụng foreach loop

using System;

 

namespace Loop

{

    class ForEachLoop

    {

        public static void Main(string[] args)

        {

            char[] myArray = {‘H’,‘e’,‘l’,‘l’,‘o’};

 

            foreach(char ch in myArray)

            {

                Console.WriteLine(ch);

            }

        }

    }

}

 

Khi chạy chương trình, output sẽ hiển thị:

H

e

l

l

o

 

Trong chương trình trên, foreach loop lặp qua mảng, myArray. Trong lần lặp đầu tiên, phần tử đầu tiên là myArray[0] được chọn và lưu trữ vào ch.

Tương tự, trong lần lặp cuối cùng, phần tử cuối cùng myArray[4] được chọn. Bên trong body của vòng lặp, giá trị của ch được in ra.

Khi chúng ta xem xét cả hai chương trình (ví dụ 1 và ví dụ 2), bạn có thể thấy chương trình sử dụng foreach loop dễ đọc và dễ hiểu hơn. Điều này là nhờ vào cú pháp đơn giản và mang biểu cảm của nó.

Do đó, vòng lặp foreach được ưu tiên hơn vòng lặp for khi làm việc với mảng và tập hợp.

Ví dụ 3: Duyệt mảng giới tính sử dụng foreach loop

Chương trình dưới đây tính toán số lượng ứng viên nam và nữ.

using System;

 

namespace Loop

{

    class ForEachLoop

    {

        public static void Main(string[] args)

        {

            char[] gender = {‘m’,‘f’,‘m’,‘m’,‘m’,‘f’,‘f’,‘m’,‘m’,‘f’};

            int male = 0, female = 0;

            foreach (char g in gender)  

            {

                if (g == ‘m’)

                        male++;

                else if (g ==‘f’)

                        female++;

            }

            Console.WriteLine(“Number of male = {0}”, male);

            Console.WriteLine(“Number of female = {0}”, female);

        }

    }

}

 

Khi chạy chương trình, output sẽ hiển thị:

Number of male = 6

Number of female = 4

 

Ví dụ 4: foreach loop với danh sách (List/Collection)

Chương trình này tính tổng các phần tử trong một danh sách (List).

using System;

using System.Collections.Generic;

 

namespace Loop

{

    class ForEachLoop

    {

        public static void Main(string[] args)

        {

            var numbers = new List() {5,-8,3,14,9,17,0,4};

            int sum = 0;

 

            foreach(int number in numbers)

            {

                sum += number;

            }

            Console.WriteLine(“Sum = {0}”, sum);

        }

    }

}

 

Khi chạy chương trình, output sẽ hiển thị:

Sum = 44

Trong chương trình này, foreach loop được sử dụng để duyệt qua một tập hợp. (Duyệt qua một tập hợp tương tự như duyệt qua một mảng)

Phần tử đầu tiên của bộ sưu tập được chọn trong lần lặp đầu tiên, phần tử thứ hai trong lần lặp thứ hai, v.v. cho đến phần tử cuối cùng.

C# câu lệnh chuyển mạch (switch) 

Trong bài viết này, chúng ta sẽ tìm hiểu về câu lệnh chuyển mạch (switch) trong C# và cách sử dụng chúng.

Câu lệnh switch có thể sử dụng để thay thế câu lệnh if…else if trong C#. 

Lợi thế của việc sử dụng câu lệnh chuyển mạch so với câu lệnh if…else if là các mã sẽ trông gọn gàng và dễ đọc hơn. .

Cú pháp của câu lệnh switch là:

switch (variable/expression)

{

    case value1:

        // Statements executed if expression(or variable) = value1

        break;

    case value2:

        // Statements executed if expression(or variable) = value1

        break;

    … … … 

    … … … 

    default:

        // Statements executed if no case matches

}

 

Câu lệnh switch đánh giá expression (hoặc variable) và so sánh giá trị của nó với giá trị (hoặc biểu thức) của mỗi case (value1, value2, …). Khi nó tìm thấy giá trị phù hợp, các câu lệnh bên trong case đó sẽ được thực thi.

Nhưng nếu không có case nào khớp với biểu thức, câu lệnh bên trong khối default sẽ được thực thi. Câu lệnh default ở cuối switch tương tự như khối else trong câu lệnh if else. 

Tuy nhiên, có một vấn đề với câu lệnh switch là khi giá trị khớp được tìm thấy, nó sẽ thực thi tất cả các câu lệnh sau giá trị đó cho đến khi kết thúc khối switch.

Để tránh điều này xảy ra, chúng ta có thể dùng câu lệnh break ở cuối mỗi case. Câu lệnh break sẽ ngăn cản chương trình thực hiện các câu lệnh không khớp bằng cách chấm dứt việc thực hiện câu lệnh switch. 

Để tìm hiểu thêm về câu lệnh switch, hãy truy cập C# break statement.

Ví dụ 1: C# Câu lệnh switch 

using System;

 

namespace Conditional

{

    class SwitchCase

    {

        public static void Main(string[] args)

        {

            char ch;

            Console.WriteLine(“Enter an alphabet”);

            ch = Convert.ToChar(Console.ReadLine());

 

            switch(Char.ToLower(ch))

            {

                case ‘a’:

                    Console.WriteLine(“Vowel”);

                    break;

                case ‘e’:

                    Console.WriteLine(“Vowel”);

                    break;

                case ‘i’:

                    Console.WriteLine(“Vowel”);

                    break;

                case ‘o’:

                    Console.WriteLine(“Vowel”);

                    break;

                case ‘u’:

                    Console.WriteLine(“Vowel”);

                    break;

                default:

                    Console.WriteLine(“Not a vowel”);

                    break;

            }

        }

    }

}

 

Khi chạy chương trình, output sẽ hiển thị:

Enter an alphabet

X

Not a vowel

 

Trong ví dụ này, user được nhắc nhập một bảng chữ cái (enter an alphabet). Bảng chữ cái được chuyển đổi thành chữ thường bằng cách sử dụng phương thức ToLower() nếu nó đang ở dạng chữ hoa.

Sau đó, câu lệnh switch sẽ kiểm tra xem bảng chữ cái được nhập bởi user có phải là nguyên âm (vowel) a, e, i, o or u hay không. 

Nếu có case nào trùng khớp, Vowel sẽ được in ra, nếu không trùng khớp thì sẽ chuyển sang khối default và Not a vowel sẽ được in ra output.

Vì output của các nguyên âm đều giống nhau, chúng ta có thể nhóm case lại như sau: 

Ví dụ 2: C# Câu lệnh switch với các case ghép

using System;

 

namespace Conditional

{

    class SwitchCase

    {

        public static void Main(string[] args)

        {

            char ch;

            Console.WriteLine(“Enter an alphabet”);

            ch = Convert.ToChar(Console.ReadLine());

 

            switch(Char.ToLower(ch))

            {

                case ‘a’:

                case ‘e’:

                case ‘i’:

                case ‘o’:

                case ‘u’:

                    Console.WriteLine(“Vowel”);

                    break;

                default:

                    Console.WriteLine(“Not a vowel”);

                    break;

            }

        }

    }

}

 

Output của chương trình từ ví dụ 1 và 2 đều là như nhau. Trong chương trình ở ví dụ này, tất cả nguyên âm sẽ được in ra và ngắt từ câu lệnh switch. 

Mặc dù câu lệnh switch làm cho đoạn code trông rõ ràng hơn so với câu lệnh if…else if nhưng switch lại bị hạn chế (chỉ có thể hoạt động với một số loại data).  Câu lệnh Switch trong C# chỉ hoạt động với:

  • Các kiểu dữ liệu nguyên bản: bool, char và integral (tích phân)
  • Kiểu dữ liệu Enumerated (Enum)
  • Kiểu dữ liệu String Class
  • Kiểu Nullable của các loại dữ liệu trên

Ví dụ 3: Chương trình tính toán đơn giản sử dụng câu lệnh switch trong C#

using System;

 

namespace Conditional

{

    class SwitchCase

    {

        public static void Main(string[] args)

        {

            char op;

            double first, second, result;

             

            Console.Write(“Enter first number: “);

            first = Convert.ToDouble(Console.ReadLine());

            Console.Write(“Enter second number: “);

            second = Convert.ToDouble(Console.ReadLine());

            Console.Write(“Enter operator (+, -, *, /): “);

            op = (char)Console.Read();

 

            switch(op)

            {

                case ‘+’:

                    result = first + second;

                    Console.WriteLine(“{0} + {1} = {2}”, first, second, result);

                    break;

                 

                case ‘-‘:

                    result = first – second;

                    Console.WriteLine(“{0} – {1} = {2}”, first, second, result);

                    break;

                 

                case ‘*’:

                    result = first * second;

                    Console.WriteLine(“{0} * {1} = {2}”, first, second, result);

                    break;

                 

                case ‘/’:

                    result = first / second;

                    Console.WriteLine(“{0} / {1} = {2}”, first, second, result);

                    break;

 

                default:

                    Console.WriteLine(“Invalid Operator”);

                    break;

                     

            }

        }

    }

}

Khi chạy chương trình, output sẽ hiển thị:

Enter first number: -13.11

Enter second number: 2.41

Enter operator (+, -, *, /): *

-13.11 * 2.41 = -31.5951

Chương trình bên trên đã lấy hai toán hạng và một toán tử làm input (từ user) và thực hiện các thao tác dựa trên toán tử. 

Input được lấy từ user bằng phương thức ReadLine() và phương thức Read(). Bạn có thể tìm hiểu thêm về Input và Output cơ bản trong C#.

Các chương trình sử dụng câu lệnh switch case để ra quyết định. 

Ngoài ra, chúng ta có thể sử dụng if…else ladder để thực hiện thao tác tương tự.

Để lại một câu trả lời