레이블이 C#인 게시물을 표시합니다. 모든 게시물 표시
레이블이 C#인 게시물을 표시합니다. 모든 게시물 표시

C# foreach 의 장점

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

// ysoftman
// foreach 가 for 비해서 일반적으로 느리지만 2차원 배열등의 순환시 루프 중첩을 피할 수 있다.
namespace foreach_test
{
    class Program
    {
        static void Main(string[] args)
        {
            // 1차원 배열에 대해서
            int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            Console.WriteLine("arr.Rank:{0}", arr.Rank);
            Console.WriteLine("arr.Length:{0}", arr.Length);
            int sum = 0;
            for (int i = 0; i < arr.Length; i++)
            {
                sum += arr[i];
            }
            Console.WriteLine("(for) arr sum = {0}", sum);

            sum = 0;
            foreach (int i in arr)
            {
                sum += i;
            }
            Console.WriteLine("(foreach) arr sum = {0}", sum);

            // 2차원 배열에 대해서
            int[,] arr2 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 }, { 9, 10 } };
            Console.WriteLine("arr2.Rank:{0}", arr2.Rank);

            // for 가 차원의 개수(rank) 만큼 중첩하여 원소에 접근해야 한다.
            sum = 0;
            for (int i = 0; i < arr2.GetLength(0); i++)
            {
                for (int j = 0; j < arr2.GetLength(1); j++)
                {
                    Console.WriteLine("arr2[{0}, {1}] = {2}", i, j, arr2[i, j]);
                    sum += arr2[i, j];
                }
            }
            Console.WriteLine("(for) arr2 sum = {0}", sum);

            // foreach 로 루프의 중첩없이 각 원소에 쉽게 접근할 수 있다.
            sum = 0;
            foreach (int i in arr2)
            {
                Console.WriteLine(i);
                sum += i;
            }
            Console.WriteLine("(foreach) arr2 sum = {0}", sum);
        }
    }
}