C# 강좌 Day-16 배열, foreach
https://youtu.be/m1bdGSLR6R0?list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z
https://youtu.be/oTgru_A31Ss?list=PLTFRwWXfOIYBmr3fK17E0VhKPyYrGy75z
배열은 동일한 데이터 형식을 갖는 데이터들의 집합이다
대부분의 애플리케이션의 경우 관련 개체의 그룹을 만들고 관리하려고 합니다.
개체를 그룹화하는 방법에는 개체 배열을 만들거나 개체 컬렉션을 만드는 두 가지가 있습니다.
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/arrays/single-dimensional-arrays
배열 선언하기
데이터 형식 이름뒤에 []기호를 사용하여 선언한다
배열에 저정된 데이터는 정수형 인덱스로 접근 가능하다
배열에 있는 데이터는 for문이나 foreach문을 사용해 출력가능하다
배열의 값을 생성하려면 new라는 키워드를 사용해 요소의 개수를 정의해야 한다
데이터형식[] 배열이름 = new 데이터형식[크기];
1차원 배열
1차원 배열을 선언
데이터형식[] 배열이름;
1차원 배열의 요소 값 대입
배열이름[인덱스] = 값;
1차원 배열요소는 정수형 인덱스를 사용해 접근가능하다
Console.WriteLine(배열이름[인덱스]);
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
//선언
int[] arr;
//인스턴스화
arr = new int[3];
//요소에 값 할당
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;
//요소 출력
Console.WriteLine(arr[0]);
Console.WriteLine(arr[1]);
Console.WriteLine(arr[2]);
//읽기/쓰기 가능
for (int i = 0; i < arr.Length; i++)
{
Console.WriteLine(arr[i]);
}
//읽기 전용
foreach (int num in arr)
{
Console.WriteLine(num);
}
}
}
배열의 다양한 초기화 방법
배열을 선언할 때 배열의 요소를 초기화할 수 있습니다.
길이 지정자는 초기화 목록의 요소 수에 따라 유추되므로 필요하지 않습니다.
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
int[] array1;
array1 = new int[] { 1, 3, 5, 7, 9 };
}
}
다음 코드와 같이 선언 시 배열을 초기화할 때 new 식과 배열 형식을 피할 수 있습니다.
이를 암시적으로 형식화된 배열이라고 합니다.
using System;
using System.Threading;
class Program
{
static void Main(string[] args)
{
int[] array2 = { 1, 3, 5, 7, 9 };
string[] weekDays2 = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
}
}
배열 변수를 만들지 않고 선언할 수 있지만 이 변수에 새 배열을 할당할 때는 new 연산자를 사용해야 합니다.
다음과 같이 작성하면 안된다
int[] array3;
array3 = new int[] { 1, 3, 5, 7, 9 }; // OK
//array3 = {1, 3, 5, 7, 9}; // Error
foreach문
https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/arrays/using-foreach-with-arrays
foreach 문은 배열의 요소를 반복하는 단순하고 깔끔한 방법을 제공합니다.
1차원 배열의 경우 foreach 문은 인덱스 0으로 시작하고 인덱스 Length - 1로 끝나는 늘어나는 인덱스 순서로 요소를 처리합니다.
int[] numbers = { 4, 5, 6, 1, 2, 3, -2, -1, 0 };
foreach (int i in numbers)
{
System.Console.Write("{0} ", i);
}
// Output: 4 5 6 1 2 3 -2 -1 0
https://www.w3schools.com/cs/cs_arrays.php
https://www.tutorialsteacher.com/csharp/array-csharp
다차원 배열
차원이 2이상인 배열을 다차원 배열이라고 한다
다차원 배열은 다음과 같이 선언한다
데이터형식[행,열] 배열이름
arr[0,0] | arr[0,1] | arr[0,2] |
arr[1,0] | arr[1,1] | arr[1,2] |
배열의 초기화
int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
// The same array with dimensions specified.
int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
// A similar array with string elements.
string[,] array2Db = new string[3, 2] { { "one", "two" }, { "three", "four" },
{ "five", "six" } };
배열의 요소 접근
// Accessing array elements.
System.Console.WriteLine(array2D[0, 0]);
System.Console.WriteLine(array2D[0, 1]);
System.Console.WriteLine(array2D[1, 0]);
System.Console.WriteLine(array2D[1, 1]);
System.Console.WriteLine(array2D[3, 0]);
System.Console.WriteLine(array2Db[1, 0]);
배열의 요소 출력
// Getting the total count of elements or the length of a given dimension.
var allLength = array3D.Length;
var total = 1;
for (int i = 0; i < array3D.Rank; i++)
{
total *= array3D.GetLength(i);
}
System.Console.WriteLine("{0} equals {1}", allLength, total);
순위를 지정하지 않고 배열을 초기화할 수도 있습니다.
int[,] array4 = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
초기화하지 않고 배열 변수를 선언하도록 선택할 경우 new 연산자를 사용하여 변수에 배열을 할당해야 합니다. new 사용은 다음 예제에서 확인할 수 있습니다.
int[,] array5;
array5 = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } }; // OK
//array5 = {{1,2}, {3,4}, {5,6}, {7,8}}; // Error
다음 예제에서는 특정 배열 요소에 값을 할당합니다.
array5[2, 1] = 25;
마찬가지로, 다음 예제에서는 특정 배열 요소의 값을 가져와 elementValue 변수에 할당합니다.
int elementValue = array5[2, 1];
다음 코드 예제에서는 가변 배열을 제외하고 배열 요소를 기본 값으로 초기화합니다.
int[,] array6 = new int[10, 10];