일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 추상 프로퍼티
- 인터페이스의 프로퍼티
- this 키워드
- 형식변환
- 배열
- System.Array
- 프로퍼티
- base()
- 무명형식
- 클래스 연습문제
- 인덱서
- 메소드숨기기
- 배열초기화
- 인터페이스 상속
- c#
- 인터페이스 예제
- 오버라이딩
- 분할 클래스
- is
- 가변배열
- 중첩클래스
- 일반화 클래스
- 프로퍼티와 생성자
- as
- 접근 한정자
- 클래스
- 컬렉션 초기화
- 이것이C#이다
- 튜플
- 자동구현프로퍼티
- Today
- Total
제로의영역
10.3 알아두면 삶이 윤택해지는 System.Array 본문
* 본 블로그 글은 머리가 아~~~주 나쁜 왕X100초보가 프로그래밍을 공부하면서 정리를 위해 작성하는 글입니다. 잘못 정리되거나 제가 잘못 이해한 글은 이해 및 조언 부탁드립니다.
* 공부는 '이것이 C#이다' 책을 보고 하고 있습니다. 참고로 저같은 왕초보가 보기 어렵게 써져 있어서 별도의 정리 문서를 만들게 되었습니다.
.NET 프레임워크의 CTS(Common Type System)에서 배열은 System.Array 클래스에 대응.
예제) int 기반의 배열이 System.Array 형식에서 파생되었음을 보여줌.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _10._3
{
class MainProgram
{
static void Main(string[] args)
{
int[] array = new int[] { 10, 20, 30, 7, 1 };
Console.WriteLine("Type Of array:{0}", array.GetType()); // GetType(): 현재 인스턴스의 런타임형식(런타임시 생성되는 인스턴스 타입)을 가져오는 메서드
Console.WriteLine("Base type Of array : {0}",array.GetType().BaseType); //BaseType: 현재 Type이 직접 상속된 형식
}
}
}
출력결과
Type Of array:System.Int32[ ] -> GetType( )이 형식을 가져오는 메소드이기 때문에 System.32[ ]가 출력
Base type Of array : System.Array ->GetType( ).BaseType이 GetType( )이 상속되는 형식(BaseType의 역할)을 가져오기 때문에 System.Array가 출력
System.Array클래스에서 자주 사용되는 메소드와 프로퍼티
분류 | 이름 | 설명 |
정적 메소드 | Sort( ) | 배열을 정렬 |
BinarySearch<T>( ) | 이진 탐색을 수행 | |
IndexOf() | 배열에서 찾고자 하는 특정 데이터의 인덱스를 반환 | |
TrueForAll<T>( ) | 배열의 모든 요소가 지정한 조건에 부합하는지의 여부를 반환 | |
FindIndex<T>( ) | 배열에서 지정한 조건에 부합하는 첫 번째 요소의 인덱스를 반환. IndexOf( )메소드가 특정 값을 찾는데 비해, FindIndex<T>( )메소드는 지정한 조건에 바탕하여 값을 찾음. | |
Resize<T>( ) | 배열의 크기를 재조정 | |
Clear( ) | 배열의 모든 요소를 초기화. 배열이 숫자 형식 기반이면 0으로, 논리형식 기반이면 false로, 참조형식 기반이면 null로 초기화 | |
ForEach<T>( ) | 배열의 모든 요소에 대해 동일한 작업을 수행하게 함 | |
인스턴스 메소드 | GetLength( ) | 배열에서 지정한 차원의 길이를 반환 |
프로퍼티 | Length | 배열의 길이를 반환 |
Rank | 배열의 차원을 반환 |
<T>: 형식 매개 변수. 메소드를 호출 할 때는 배열의 기반 자료형을 매개 변수로 입력하면 컴파일러가 해당 형식에 맞춰 동작하도록 위 메소드들을 컴파일함.
1. 용도: 출력을 희망하는 메소드가 코드가 같고 형식(int, float, string.. 등)만 다를 경우
2. 사용법
(1) 메소드 작성시 각기 다른 형식을 통합하여 < 형식 매개변수(임의의 문자) >로 작성
(2) 출력할 때 < 출력 희망 형식(int, float, string.. 등) > 을 입력하면 원하는 형식의 데이터 출력 가능
예제)
using System;
namespace _10._3
{
class MainProgram
{
private static bool CheckPassed(int score)
//private: 클래스 내부에서만 접근이 가능한 한정자, static: 정적한정자. 클래스에 소속되도록 지정
{
if (score >= 60)
return true;
else
return false;
}
private static void Print(int value)
{
Console.Write($"{value} ");
}
static void Main(string[] args)
{
int[] scores = new int[] { 80, 74, 81, 90, 34 };
//배열 초기화
foreach (int score in scores)
//foreach: 배열을 순회하며 각 데이터 요소에 차례대로 접근
Console.Write($"{score} ");
//80 74 81 90 34 출력
Console.WriteLine();
Array.Sort(scores); //Sort(): 배열 오름차순 정렬
Array.ForEach<int>(scores, new Action<int>(Print));
/* ForEach<int>: int형식의 변수에 대해 동일한 작업 수행
Action<T>Delegate: 리턴값이 없는 함수에 사용되는 Delegate */
Console.WriteLine();
Console.WriteLine($"Number of dimensions:{scores.Rank}");
//Rank: 배열의 차원을 반환, scores는 1차원 배열, 1출력
Console.WriteLine("Binary Search:81is at{0}",
//BinarySearch<int>: 이진 탐색 수행.
Array.BinarySearch<int>(scores, 81));
//scores에서 81의 위치를 찾아 표시
Console.WriteLine("Liner Search:90 is at{0}",
//LinerSearch<int>: 선형 탐색 수행
Array.IndexOf(scores, 90));
//scores에서 90의 위치를 찾아 표시
Console.WriteLine("Everyone passed?:{0}",
Array.TrueForAll<int>(scores, CheckPassed));
/* TrueForAll: 배열의 모든 요소가 지정한 조건에 부합하는지 여부를 반환,
메소드는 배열과 함께 조건을 검사하는 메소드를 함께 매개변수로 받음.*/
int index=Array.FindIndex<int>(scores,
delegate(int score)
{
if (score < 60)
return true;
else
return false;
}); // index는 60보다 작은 변수(여기서는 34)를 가리킴
/* FindIndex 메소드는 특정 조건에 부합하는 메소드를 매개 변수로 받음.
여기에선 익명 메소드로 구현.*/
scores[index] = 61; //index를 61로 수정
Console.WriteLine("Everyone passed?:{0}",
Array.TrueForAll<int>(scores, CheckPassed));
//다시 TrueForAll 실행, true 출력
Console.WriteLine($"Old length of scores:{scores.GetLength(0)}");
//GetLength(): 배열에서 지정한 차원의 길이를 반환
Array.Resize<int>(ref scores, 10);
//5였던 배열의 용량을 10으로 재조정
Console.WriteLine($"New length of scores:{scores.Length}");
//Length: 배열의 길이를 반환
Array.ForEach<int>(scores, new Action<int>(Print));
Console.WriteLine();
Array.Clear(scores, 3, 7);
/*Clear: 배열의 모든 요소를 초기화,
3번부터 7번까지의 배열을 초기화: 숫자는 0으로 초기화*/
Array.ForEach<int>(scores, new Action<int>(Print));
Console.WriteLine();
}
}
}
출력 결과:
80 74 81 90 34
34 74 80 81 90
Number of dimensions:1
Binary Search:81is at3
Liner Search:90is at4
Everyone passed?:False
Everyone passed?:True
Old length of scores:5
New length of scores:10
61 74 80 81 90 0 0 0 0 0
61 74 80 0 0 0 0 0 0 0
'C#' 카테고리의 다른 글
10.5 다차원배열 (0) | 2019.08.09 |
---|---|
10.4 2차원 배열 (0) | 2019.08.06 |
10.2 배열을 초기화하는 세가지 방법(배열2) (0) | 2019.08.02 |
10.1 All for one, one for all (배열) (0) | 2019.07.31 |
9.7 추상 클래스와 프로퍼티(추상 프로퍼티) (0) | 2019.07.29 |