안녕하세요. BlockDMask 입니다.
오늘은 C#에 존재하는 조금 특별한 반복문 foreach에 대해서 알아보도록 하겠습니다.
1. foreach에 대해서
(1) foreach 란?
- 끝을 지정해주는 다른 반복문과 달리, 인자로 들어온 itrable-item의 내부 인덱스 끝까지 알아서 순환을 해주는 반복문 입니다.
(2) foreach 반복문의 생김새(syntax)
foreach (element in iterable-item)
{
// body
}
: 여기서 element는 데이터 타입과 변수명을 포함합니다. 아래와 같이 사용합니다.
: foreach(string str in arr);
: foreach(데이터타입 변수명 in 배열,컬렉션등)
2. foreach 예제1 - 1차원 배열에서의 foreach
(1) 소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | static void Main(string[] args) { int[] arr = new int[7] { 11, 12, 13, 14, 15, 16, 17 }; //foreach문 Console.WriteLine("## foreach 사용"); int index = 0; foreach(int elem in arr) { Console.WriteLine("arr[" + index + "] : " +elem); ++index; } Console.WriteLine("current i : " + index); //for문으로 작성했다면? Console.WriteLine(); Console.WriteLine("## for 사용"); for(int i=0; i<7; ++i) { Console.WriteLine("arr[" + i + "] : " + arr[i]); } } | cs |
: 1차원 배열 arr을 선언과 동시에 초기화를 해서, foreach문을 통해 인자들을 출력해 보았습니다.
: 관련 도서나, 인터넷 검색을 했지만 아직 foreach에서 현재 어느 index를 읽고 있는지 알수 있는 부분을 못찾았습니다.
: C++에서 list같은 container들을 C#에서는 컬렉션이라 부르는데 일부 컬렉션에서는 index를 구하는 방법이 있는걸로 보이는데 배열에서따로 구하는 것은 찾지 못했습니다.
(2) 결과
3. foreach 예제2 - 2차원 배열에서의 foreach
(1) 소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | static void Main(string[] args) { int[,] arr = new int[4, 3] { { 11, 12, 13 }, { 21, 22, 23 }, { 31, 32, 33 }, { 41, 42, 43 } }; //foreach문 1개로 해결가능. Console.WriteLine("## foreach 사용"); int index = 0; foreach(int elem in arr) { Console.WriteLine("arr[" + index + "] : " +elem); ++index; } Console.WriteLine("current i : " + index); //for문으로 작성했다면? //이중 for문으로 작성해야합니다. Console.WriteLine(); Console.WriteLine("## for 사용"); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 3; ++j) { Console.WriteLine("arr[" + i + "," + j + "] : " + arr[i,j]); } } } | cs |
: 2차원 배열도 foreach를 사용하면, 한번에 순회하는 것을 알 수 있습니다.
: C#에서 2차원 배열의 선언과 초기화 그리고 사용방법이 궁금하신 분들은 아래 링크로 따라가시면 됩니다.
Link - [<개인공부>/[C#]] - [C#] 배열, 다차원배열, 가변배열에 대해서 (array, jagged array)
(2) 결과
: 2차원 배열에서 foreach를 썼을경우 어느 위치에 있는 인덱스 인지 알 방법이 없네요.
: 혹시 아시는분 있다면, 댓글 부탁드려요. 저도 찾아볼게요 여러분.
4. foreach 예제3 - enum을 순회할 수 있는 foreach
(1) 소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | enum Month { January = 1, February, March, April, May, June, July, August, September, October, November, December }; static void Main(string[] args) { Console.WriteLine("## foreach 열거형 출력 - Enum.GetValues()"); foreach (int elem in Enum.GetValues(typeof(Month))) { Console.WriteLine(elem + "월"); } Console.WriteLine(); Console.WriteLine("## foreach 열거형 출력 - Enum.GetNames()"); foreach (string elem in Enum.GetNames(typeof(Month))) { Console.WriteLine(elem); } } | cs |
: 이렇게 열거형일때 System.Enum 클래스의 멤버 함수들을 이용하면, 열거형(enum)의 내부 요소들을 순회할 수 있습니다.
: 굉장히 편리하네요.
: 여기서 봐야할 것은 elem의 타입입니다. 받을 테이터 타입을 알맞게 바꿔서 지정해주어야합니다.
(2) 결과
: Enum.GetValues()를 이용하면 foreach를 돌면서 enum에 해당하는 int 값을 반환해줍니다.
(enum을 처음 선언했을때 아무 타입도 넣어주지 않으면 default 타입이 int로 지정됩니다.)
: Enum.GetNames()를 이용하면 foreach를 돌면서 enum에 해당하는 string 값을 반환해줍니다.
추가적으로 제가 foreach를 유용하게 사용할 수 있는 C#만의 자료구조들을 배우게 되면, 나중에 "foreach 반복문2" 라는 이름으로 포스팅 하겠습니다. 감사합니다. 여러분의 하트, 지적, 댓글이 저에게 큰 힘이 됩니다.
'<개인공부> > [C#]' 카테고리의 다른 글
[C#] 리터럴(Literal)이란? (7) | 2019.07.05 |
---|---|
[C#] random, 랜덤 클래스에 대해서 (랜덤함수, 난수생성) (0) | 2019.05.08 |
[C#] params 가변인자 매개변수에 대해서. (4) | 2019.03.21 |
[C#] checked, unchecked 키워드에 대해서. (0) | 2019.03.20 |
[C#] 계산기 윈도우폼 (0) | 2019.02.22 |
[C#] 리터럴, 예약어, 식별자에 대해서 (literal, reserved word, identifier) (3) | 2019.01.11 |
[C#] 배열 초기화, 다차원배열, 가변배열에 대해서 (array, jagged array) (4) | 2019.01.10 |
[C#] 자료형에 대해서 (Built-in Data Type, 기본자료형들) (4) | 2019.01.09 |