-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
Sort 오름차순, 내림차순
24.04.09 17:45 작성 24.04.09 17:47 수정 조회수 58
0
대리자로 소트를 오름차순, 내림차순을 쉽게 구현할 수 있다고 하셨는데
namespace 4.델리게이트
{
internal class Program
{
delegate void Sort(int[] arr);
static void MinSort(int[] arr)
{
int id;
for(int i = 0; i < arr.Length - 1; i++)
{
id = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[id])
id = j;
}
int temp = arr[id];
arr[id] = arr[i];
arr[i] = temp;
}
}
static void MaxSort(int[] arr)
{
int id;
for (int i = 0; i < arr.Length - 1; i++)
{
id = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] > arr[id])
id = j;
}
int temp = arr[id];
arr[id] = arr[i];
arr[i] = temp;
}
}
static void PrintArr(int[] arr)
{
foreach (int a in arr)
Console.Write(a + " ");
Console.WriteLine();
}
static void Main(string[] args)
{
// delegate (대리자) 사용 빈도 높음 주의
int[] arr = new int[] { 20, 10, 40, 50, 15 };
Sort[] sort = new Sort[] { MaxSort, MinSort };
string str = Console.ReadLine();
switch (str)
{
case "max":
sort[0](arr);
break;
case "min":
sort[1](arr);
break;
}
PrintArr(arr);
}
}
}
혹시 이것도 그 편한 방법에 포함되는 코드라고 할 수 있을까요?
그리고
Sort sort = MaxSort;
sort += MinSort;
이렇게 두개의 함수를 추가한다하면
제가 위에서 보낸 코드 처럼 sort[0]으로 접근이 안되는데 어떻게 접근해야할까요?
답변을 작성해보세요.
0
인프런 AI 인턴
2024.04.11
안녕하세요, 인프런 AI 인턴입니다.
질문주신 코드에 대해 답변 드리자면, 전달하신 코드는 delegate(대리자)를 사용하여 배열을 오름차순과 내림차순으로 정렬하는 방법을 보여주고 있습니다. 따라서 이것 역시 여러 가지 방법 중 하나로서 대리자를 사용한 편리한 구현 방법이라고 할 수 있습니다.
Sort sort = MaxSort; sort += MinSort;
코드를 사용한 경우는 멀티캐스트 대리자의 개념을 활용하는 것입니다. 이 경우, sort
대리자는 MaxSort
와 MinSort
두 메소드를 차례로 호출하도록 설정되지만, 배열이 MaxSort
에 의해 한 번 정렬된 후 MinSort
에 의해 다시 정렬됩니다. 따라서 이렇게 설정할 경우 마지막에 추가된 MinSort
의 동작만 실질적으로 결과에 반영됩니다.
멀티캐스트 대리자에서 특정 함수를 호출하려고 할 때, sort[0]
과 같은 인덱서 접근은 지원하지 않습니다. 멀티캐스트 대리자에 등록된 메소드들을 개별적으로 호출하고 싶다면, 대리자의 GetInvocationList()
메서드를 사용하여 대리자 체인을 개별 대리자 배열로 변환할 수 있습니다. 이 배열의 각 요소는 대리자로 캐스트하여 호출할 수 있습니다.
예를 들어, 다음과 같은 방식으로 멀티캐스트 대리자의 개별 메소드를 호출할 수 있습니다.
Delegate[] delegates = sort.GetInvocationList();
foreach (var d in delegates)
{
((Sort)d)(arr); // 여기에서 d는 Sort 타입으로 캐스팅되어 호출됩니다.
}
이 방법을 사용하면 sort
대리자에 등록된 각 메소드를 개별적으로 호출하며, 위의 예시처럼 MaxSort
와 MinSort
가 각각 배열에 대해 실행됩니다. 그러나 앞서 언급한 대로 결과는 마지막으로 실행된 정렬 메소드에 따라 결정됩니다.
답변 1