일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dart 언어
- 도커
- c언어
- 구조체
- C# delegate
- 유니티
- jupyter lab
- c# 윈폼
- C++
- c#
- Algorithm
- jupyter
- c# 추상 클래스
- Data Structure
- 플러터
- gitlab
- Houdini
- Unity
- 깃
- Python
- 다트 언어
- HTML
- c# winform
- git
- 포인터
- C언어 포인터
- github
- vim
- Flutter
- docker
Archives
- Today
- Total
nomad-programmer
[Programming/C#] 가변 배열 본문
2차원 배열이나 3차원 배열 같은 다차원 배열을 "배열을 요소로 갖는 배열" 이다. 허나 진정한 의미에서의 배열을 요소로 갖는 배열은 "가변 배열 (Jagged Array)" 이다.
가변 배열은 다양한 길이의 배열을 요소로 가지는 다차원 배열로 이용될 수 있다. 2차원 배열의 요소에 접근할 때 반드시 첨자 두 개를 사용해야 했다. 하나만 사용해서 1차원 배열에 접근한다거나 하는 일은 불가능하다. 아래의 예를 보자.
int[,] arr2d = new int[2, 3] {
{1, 2, 3},
{4, 5, 6}
};
// 2차원 배열이면 첨자 2개가 필히 들어가야 한다.
arr2d[1, 2];
// 2차원 배열이면 첨자가 1개 뿐이라면 에러 발생. 1차원 배열에 접근할 수 없다...
arr2d[1];
가변 배열은 이러한 다차원 배열과는 달리 배열을 요소로써 접근할 수 있다.
// 데이터형식[][] 배열이름 = new 데이터형식[가변 배열의 크기][];
int[][] arr2d = new int[2][3] {
{1, 2, 3},
{4, 5, 6}
};
// 접근 OK!
arr2d[1][2];
// 1차원 배열에 접근 OK!
arr2d[1];
2차원 배열과 닮았지만 2차원 배열은 아니다. 2차원 배열은 []괄호를 하나만 쓰고 그 안에 첨자를 두 개 사용한 반면, 가변 배열은 [] 괄호가 두 개이다. 가변 배열의 요소로 입력되는 배열은 그 길이가 모두 같을 필요가 없다. 그래서 Jagged 배열이라고 한다.
using System;
namespace test
{
internal class Program
{
public static void Main(string[] args)
{
// [C언어 해석]: int** jagged = (int**)malloc(sizeof(int*) * 3);
int[][] jagged = new int[3][];
// [C언어 해석]: *(jagged+0) = (int*)malloc(sizeof(int) * 5);
jagged[0] = new int[5] {1, 2, 3, 4, 5};
// [C언어 해석]: *(jagged+1) = (int*)malloc(sizeof(int) * 3);
jagged[1] = new int[] {10, 20, 30};
// [C언어 해석]: *(jagged+2) = (int*)malloc(sizeof(int) * 2);
jagged[2] = new int[] {100, 200};
foreach(int[] arr in jagged)
{
Console.WriteLine($"Length : {arr.Length}");
foreach (int ele in arr)
{
Console.Write($"{ele} ");
}
Console.WriteLine();
}
Console.WriteLine();
int[][] jagged2 = new int[][]
{
new int[] {1000, 2000},
new int[4] {1, 2, 3, 4}
};
foreach (int[] arr in jagged2)
{
Console.Write($"Length : {arr.Length}, ");
foreach (int ele in arr)
{
Console.Write($"{ele} ");
}
Console.WriteLine();
}
}
}
}
/* 결과
Length : 5
1 2 3 4 5
Length : 3
10 20 30
Length : 2
100 200
Length : 2, 1000 2000
Length : 4, 1 2 3 4
*/
C#의 가변 배열을 알아보았다. C#은 가변적인 배열을 손쉽게 쓸 수 있도록 해 놓아서 편리하지만 그 원리를 알 지 못하기에 아래에 C언어로 구현한 가변적인 배열 링크를 걸어 놓았다.
* C언어로 구현한 가변 배열 *
'Programming > C#' 카테고리의 다른 글
[Programming/C#] 인덱서 (Indexer) (0) | 2020.09.15 |
---|---|
[Programming/C#] 컬렉션 (Collection) (0) | 2020.09.14 |
[Programming/C#] 다차원 배열 (0) | 2020.09.14 |
[Programming/C#] System.Array (0) | 2020.09.14 |
[Programming/C#] 추상 클래스와 프로퍼티 (0) | 2020.09.14 |
Comments