C#의 2D 배열
2차원 배열은 행렬 형태를 가정하여 여러 행과 열에 걸쳐 있는 동종 요소의 모음입니다. 다음은 m개의 행과 n개의 열이 있어 m x n 구성의 행렬을 생성하는 2D 배열의 예입니다.
[ a1, a2, a3, a4, ..., an b1, b2, b3, b4, ..., bn c1, c2, c3, c4, ..., cn . . . m1, m2, m3, m4, ..., mn ]
재기드 배열의 개념
Jagged Array는 배열의 배열입니다. 가변 배열은 본질적으로 다차원 배열을 형성하기 위해 함께 가변된 여러 배열입니다. 2차원 들쭉날쭉한 배열은 다음과 같습니다.
[ [ a1, a2, a3, a4, ..., an ], [ b1, b2, b3, b4, ..., b20 ], [ c1, c2, c3, c4, ..., c30 ], . . . [ m1, m2, m3, m4, ..., m25 ] ]
가변 배열의 모든 행에는 동일한 수의 요소가 포함될 수도 있고 포함되지 않을 수도 있습니다.
진정한 2D 배열과 가변 배열
Jagged Array는 구현 관점에서 실제 2D 배열과 완전히 다릅니다. C#에서 다차원 배열과 가변 배열을 모두 구현하는 방법을 이해하는 것이 중요합니다.
프로그래밍 언어는 다차원 배열 구현이 다릅니다. C, C++, C#, Fortran 등과 같은 일부 프로그래밍 언어는 진정한 2D 배열을 지원합니다. 배열 배열(일명 들쭉날쭉한 배열)을 사용하여 이 동작을 시뮬레이션하는 다른 방법도 있습니다. 그렇다면 실제 2차원 배열은 들쭉날쭉한 배열과 어떻게 다릅니까?
다차원 배열의 두 가지 구현은 스토리지 소비 측면에서 다릅니다. 실제 2D 배열에는 각각 n개의 요소로 구성된 m개의 행이 있지만, 들쭉날쭉한 배열에는 각각 서로 다른 수의 요소가 있는 m개의 행이 있을 수 있습니다. 이는 데이터 세트에 대해 낭비되는 공간을 최소화합니다. 따라서 아래의 들쭉날쭉한 배열은 완벽하게 괜찮습니다.
int[][] jagged array = [ [1, 2, 3, 4], [5, 6, 7], [8, 9] ]
동일한 데이터 세트를 실제 2D 배열로 구현한다면 아래와 같을 것입니다.
int[,] multiDimArray = [ 1, 2, 3, 4 5, 6, 7, 0 8, 9, 0, 0 ]
C#의 2D 배열 작업
아래에는 2D 배열에 대한 일부 작업이 나와 있습니다.
1. C# 2D 배열 구성
C#에서 2차원 배열을 선언하는 방법과 C#에서 2차원 배열을 선언하지 않는 방법을 살펴보겠습니다.
방법
C#의 진정한 2D 배열 구현은 배열 선언으로 시작됩니다. 아래와 같습니다:
int[,] arr2D; string[,] arr2D_s;
정의의 쉼표 수에 따라 배열의 크기가 결정됩니다. 배열 선언에서는 배열의 크기를 지정할 수 없습니다. 이는 배열 초기화 중에 수행되어야 합니다.
어떻게 하지 않을 수 있나요?
2D 배열 구현과 들쭉날쭉한 배열을 혼동하기 쉽습니다. 들쭉날쭉한 배열 선언은 다음과 같습니다.
int[][] jagged array;
2. C# 2D 배열 초기화
다음 단계는 방금 선언한 2D 배열을 초기화하는 것입니다. 여러 가지 방법이 있습니다.
새 연산자 사용
arr2D = new int[2,3]; //separate initialization string[,] arr2D_s = new string[4,5]; //with declaration
값으로 초기화
//without dimensions
arr2D = new int[,]{{1,2}, {3,4}, {5,6}};
//with declaration
arr2D_s = new string[2,2]{{"one","two"},{"three", "four"}};
신규 운영자 없이
Int[,] arr2D_a = {{1,2}, {3,4}, {5,6}, {7,8}};
3. C# 2D 배열에서 요소 읽기
단일 요소 읽기
다음 작업은 2D 배열에서 요소를 읽는 것입니다. 2D 배열은 m x n 요소의 행렬이므로 각 요소에는 지정된 행 인덱스와 열 인덱스 조합이 있습니다. 아래 첨자에 행 인덱스와 열 인덱스를 제공하여 요소에 액세스할 수 있습니다. 예는 다음과 같습니다.
int[,] arr2D_i = {{1,2}, {3,4}, {5,6}, {7,8}};
string arr2D_s = {{"one","two"},{"three", "four"}};
int val_i = arr2D_i[2,1]; //returns '6'
string val_s = arr2D_s[1,1]; //returns 'four'
참고- 행과 열의 인덱스는 0부터 시작합니다. 따라서 인덱스 위치 [0,0]이 배열의 첫 번째 요소이고 [m-1, n-1]이 마지막 요소입니다.
모든 요소 읽기
그러나 위의 방법은 배열에 있는 단일 요소의 값을 제공합니다. 전체 배열을 어떻게 탐색하여 배열의 모든 요소를 읽을 수 있나요? 간단한 해결책은 중첩된 for/while 루프를 사용하여 전체 배열을 반복하는 것입니다.
코드
using System;
public class Program
{
public static void Main()
{
int[,] arr2D_i = new int[3, 3]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
//reading all the elements through for loop
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
Console.Write(arr2D_i[i, j] + "\t");
}
Console.WriteLine("\n");
}
}
}
출력

GetLength() 메서드
알겠습니다. 하지만 위의 예는 배열의 요소 수를 미리 알고 있는 경우에만 작동합니다. 내 배열이 동적이면 어떻게 되나요? 동적 배열의 모든 요소를 어떻게 탐색합니까? 여기에 GetLength 메서드가 있습니다.
int arr2D.GetLength(0); //1차원(행) 반환
int arr2D.GetLength(1); //2차원(열) 반환
코드
using System;
public class Program
{
public static void Main()
{
int[,] arr2D_i = new int[3, 3]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
//reading all the elements through for loop
for (int i = 0; i < arr2D_i.GetLength(0); i++)
{
for (int j = 0; j < arr2D_i.GetLength(1); j++)
{
Console.Write(arr2D_i[i, j] + "\t");
}
Console.WriteLine("\n");
}
}
}
출력

각 루프의 힘
for-each 루프는 배열의 각 요소에 대해 일련의 명령을 실행합니다. 이는 매우 강력한 루프 메커니즘이며 기존 for 루프보다 더 효율적이므로 사용하는 것이 좋습니다.
코드
using System;
public class Program
{
public static void Main()
{
string[,] arr2D_s = new string[3, 3]{{"one", "two", "three"}, {"four","five","six"}, {"seven","eight","nine"}};
//reading all the elements through foreach loop
foreach(var ele in arr2D_s)
{
Console.WriteLine(ele);
}
}
}
출력

4. C# 2D 배열에 요소 삽입
이제 C# 2D 배열에 요소를 삽입하는 방법에 대한 예를 살펴보겠습니다. 아이디어는 배열의 각 위치를 순회하여 값을 할당하는 것입니다.
코드
using System;
public class Program
{
public static void Main()
{
int[,] arr2D_i = new int[3, 3]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int[,] squares = new int[3, 3];
int[,] cubes = new int[3, 3];
for (int i = 0; i < arr2D_i.GetLength(0); i++)
{
for (int j = 0; j < arr2D_i.GetLength(1); j++)
{
squares[i, j] = arr2D_i[i, j] * arr2D_i[i, j];
cubes[i, j] = squares[i, j] * arr2D_i[i, j];
}
}
Console.WriteLine("Squares\n");
DisplayArray(squares);
Console.WriteLine("\n\nCubes\n");
DisplayArray(cubes);
}
static void DisplayArray(int[, ] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{ Console.Write(arr[i, j] + "\t"); }
Console.WriteLine("\n");
}
}
}
Output

5. Update Elements in C# 2D Array
We will update our array to multiply each element with 2. The idea is to traverse each position of the array and update the value it holds.
Code
using System;
public class Program
{
public static void Main()
{
int[, ] arr2D_i = new int[3, 3]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
Console.WriteLine("Original Array\n");
DisplayArray(arr2D_i);
for (int i = 0; i < arr2D_i.GetLength(0); i++)
{
for (int j = 0; j < arr2D_i.GetLength(1); j++)
{
arr2D_i[i, j] *= 2;
}
}
Console.WriteLine("\n\nUpdated Array (multiplied by 2)\n");
DisplayArray(arr2D_i);
}
static void DisplayArray(int[, ] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.Write(arr[i, j] + "\t");
}
Console.WriteLine("\n");
}
}
}
Output

6. Delete Elements in C# 2D Array
This is a tricky operation. It is not possible to delete a single element from a true C# 2D Array. Deleting a single element will disturb the dimensions of the array such that it would no longer be a matrix. C# does not allow that unless it is a jagged array.
So, what is the solution? Do we delete the entire row or the entire column? No, C# would not allow that as well. The array is fixed in size when declared or initialized. It has fix bytes of memory allocated. We cannot change that at run time.
The solution here is to create a new array without the elements that we want to delete.
Code
using System;
public class Program
{
public static void Main()
{
int[,] arr2D_i = new int[3, 3]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
int[,] new_array = new int[2,2];
Console.WriteLine("Original Array\n");
DisplayArray(arr2D_i);
int rowToDel = 2;
int colToDel = 2;
for (int i = 0; i < arr2D_i.GetLength(0); i++)
{
if(i==rowToDel)
continue;
for (int j = 0; j < arr2D_i.GetLength(1); j++)
{
if(j==colToDel)
continue;
new_array[i,j]=arr2D_i[i,j];
}
}
Console.WriteLine("\n\nArray after deleting elements\n");
DisplayArray(new_array);
}
static void DisplayArray(int[, ] arr)
{
for (int i = 0; i < arr.GetLength(0); i++)
{
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.Write(arr[i, j] + "\t");
}
Console.WriteLine("\n");
}
}
}
Output

Conclusion
Thus, we have seen how a 2D Array is implemented in C# and what are the various CRUD operations we can perform on it. We also learned the difference between a true 2D implementation and a jagged array. There are a lot more methods available in C# to assist the developers with working with Arrays at ease. Do check them out at the MSDN docs.
Recommended Articles
This is a guide to 2D Arrays in C#. Here we discuss the concept of jagged arrays along with operations on 2D arrays in C#. You may also look at the following articles to learn more-
- 2D Arrays in Java
- 2D Arrays In Python
- Arrays in C#
- Arrays in C++
위 내용은 C#의 2D 배열의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
핫 AI 도구
Undress AI Tool
무료로 이미지를 벗다
Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱
AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.
Clothoff.io
AI 옷 제거제
Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!
인기 기사
뜨거운 도구
메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.
스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
드림위버 CS6
시각적 웹 개발 도구
SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)
멀티 스레딩과 비동기 C#의 차이
Apr 03, 2025 pm 02:57 PM
멀티 스레딩과 비동기식의 차이점은 멀티 스레딩이 동시에 여러 스레드를 실행하는 반면, 현재 스레드를 차단하지 않고 비동기식으로 작업을 수행한다는 것입니다. 멀티 스레딩은 컴퓨팅 집약적 인 작업에 사용되며 비동기식은 사용자 상호 작용에 사용됩니다. 멀티 스레딩의 장점은 컴퓨팅 성능을 향상시키는 것이지만 비동기의 장점은 UI 스레드를 차단하지 않는 것입니다. 멀티 스레딩 또는 비동기식을 선택하는 것은 작업의 특성에 따라 다릅니다. 계산 집약적 작업은 멀티 스레딩을 사용하고 외부 리소스와 상호 작용하고 UI 응답 성을 비동기식으로 유지 해야하는 작업을 사용합니다.
C# vs. C : 역사, 진화 및 미래 전망
Apr 19, 2025 am 12:07 AM
C#과 C의 역사와 진화는 독특하며 미래의 전망도 다릅니다. 1.C는 1983 년 Bjarnestroustrup에 의해 발명되어 객체 지향 프로그래밍을 C 언어에 소개했습니다. Evolution 프로세스에는 자동 키워드 소개 및 Lambda Expressions 소개 C 11, C 20 도입 개념 및 코 루틴과 같은 여러 표준화가 포함되며 향후 성능 및 시스템 수준 프로그래밍에 중점을 둘 것입니다. 2.C#은 2000 년 Microsoft에 의해 출시되었으며 C와 Java의 장점을 결합하여 진화는 단순성과 생산성에 중점을 둡니다. 예를 들어, C#2.0은 제네릭과 C#5.0 도입 된 비동기 프로그래밍을 소개했으며, 이는 향후 개발자의 생산성 및 클라우드 컴퓨팅에 중점을 둘 것입니다.
C# Multithreading 프로그래밍이란 무엇입니까? C# Multithreading 프로그래밍은 C# 멀티 스레딩 프로그래밍을 사용합니다
Apr 03, 2025 pm 02:45 PM
C# 멀티 스레드 프로그래밍은 프로그램이 여러 작업을 동시에 수행 할 수있는 기술입니다. 성능을 향상시키고 응답 성을 향상시키고 병렬 처리를 구현함으로써 프로그램 효율성을 향상시킬 수 있습니다. 스레드 클래스는 스레드를 직접 생성하는 방법을 제공하지만 작업 및 Async/Await와 같은 고급 도구는보다 안전한 비동기 작업 및 클리너 코드 구조를 제공 할 수 있습니다. 멀티 스레드 프로그래밍의 일반적인 과제에는 교착 상태, 레이스 조건 및 자원 누출이 포함되며, 스레딩 모델의 신중한 설계와 이러한 문제를 피하기 위해 적절한 동기화 메커니즘을 사용해야합니다.
C# .NET : .NET 생태계로 응용 프로그램을 구축합니다
Apr 27, 2025 am 12:12 AM
.NET을 사용하여 응용 프로그램을 구축하는 방법? .NET을 사용하여 응용 프로그램 빌드 응용 프로그램은 다음 단계를 통해 달성 할 수 있습니다. 1) C# 언어 및 크로스 플랫폼 개발 지원을 포함한 .NET의 기본 사항을 이해합니다. 2) .NET 생태계의 구성 요소 및 작동 원리와 같은 핵심 개념을 배우십시오. 3) 간단한 콘솔 애플리케이션에서 복잡한 WebApis 및 데이터베이스 운영에 이르기까지 기본 및 고급 사용을 마스터합니다. 4) 구성 및 데이터베이스 연결 문제와 같은 일반적인 오류 및 디버깅 기술에 익숙해야합니다. 5) 응용 프로그램 성능 최적화 및 비동기 프로그래밍 및 캐싱과 같은 모범 사례.
웹에서 데스크톱으로 : C# .NET의 다양성
Apr 15, 2025 am 12:07 AM
C#.NETISVERSATILEFORBOTHWEBBANDDESKTOPDEVENTROMMENT.1) FORWEB, useASP.NETFORRICHINTERFACES.3) FORDESKTOP.3) USEXAMARINFORCROSS-PLATFORMDEEVENTRIMMENT, LINABILEDEV, MACODEDEV, and MACODEDOWS, 및 MACODEDOWS.
C#에서 멀티 스레딩의 이점은 무엇입니까?
Apr 03, 2025 pm 02:51 PM
멀티 스레딩의 장점은 특히 많은 양의 데이터를 처리하거나 시간이 많이 걸리는 작업을 수행하기 위해 성능 및 리소스 활용도를 향상시킬 수 있다는 것입니다. 이를 통해 여러 작업을 동시에 수행하여 효율성을 향상시킬 수 있습니다. 그러나 너무 많은 스레드가 성능 저하로 이어질 수 있으므로 CPU 코어 수와 작업 특성에 따라 스레드 수를 신중하게 선택해야합니다. 또한 다중 스레드 프로그래밍에는 교착 상태 및 레이스 조건과 같은 과제가 포함되며 동기화 메커니즘을 사용하여 해결해야하며 동시 프로그래밍에 대한 확실한 지식, 장단점을 측정하고주의해서 사용해야합니다.
.NET 프레임 워크 대 C#: 용어 디코딩
Apr 21, 2025 am 12:05 AM
.NETFramework는 소프트웨어 프레임 워크이며 C#은 프로그래밍 언어입니다. 1..netframework는 데스크탑, 웹 및 모바일 애플리케이션 개발을 지원하는 라이브러리 및 서비스를 제공합니다. 2.C#은 .NETFramework 용으로 설계되었으며 최신 프로그래밍 기능을 지원합니다. 3..NetFramework는 CLR을 통해 코드 실행을 관리하고 C# 코드는 IL로 컴파일되어 CLR에 의해 실행됩니다. 4. .NETFramework를 사용하여 응용 프로그램을 신속하게 개발하면 C#은 LINQ와 같은 고급 기능을 제공합니다. 5. 일반적인 오류에는 유형 변환 및 비동기 프로그래밍 교착 상태가 포함됩니다. 디버깅을 위해서는 VisualStudio 도구가 필요합니다.
C# .NET 애플리케이션 배포 Azure/AWS : 단계별 안내서
Apr 23, 2025 am 12:06 AM
C# .NET 앱을 Azure 또는 AWS에 배포하는 방법은 무엇입니까? 답은 Azureappservice와 Awelasticbeanstalk를 사용하는 것입니다. 1. Azure에서 Azureappservice 및 AzurePipelines를 사용하여 배포를 자동화하십시오. 2. AWS에서 Amazon Elasticbeanstalk 및 Awslambda를 사용하여 배포 및 서버리스 컴퓨팅을 구현하십시오.


