π» Programming Language/C#
36. μ΅λͺ λ©μλ
S.Honey
2022. 4. 8. 09:13
μ΅λͺ λ©μλ(Anonymous Method)
: μ΄λ¦μ΄ μλ λ©μλ
μ μΈνμ
λΈλ¦¬κ²μ΄νΈ μΈμ€ν΄μ€λͺ
= delegate(λ§€κ°λ³μ)
{
μ€νμ½λ ...
}
μ¬μ© μμ μ½λ
using System.Collections;
namespace AnonymousMethodEx
{
delegate int CalDelegate(int x, int y);
class Program
{
static void Main(string[] args)
{
CalDelegate cd;
cd = delegate (int x, int y)
{
return x * y;
}; // => μ΅λͺ
λ©μλ νν (μ΄λ¦μ΄ μμ)
// λ¨ λ리μμ νμκ³Ό κ°μ νμμ μ¨μΌνλ€.
// κ³ λ €ν΄μΌ ν νμμ λ°ννμ
, μΈμνμ
, μΈμμκ° μλ€.
Console.WriteLine($"{cd(10, 20)}");
}
}
}
Output
200
delegate
λ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μλν΄λμ€μ²λΌ λμ
μ νκΈ° λλ¬Έμ ν΄λμ€ λ°μΌλ‘ λΉΌμ μμ±νλκ² μΌλ°μ μ΄μ§λ§ μν©μ λ°λΌμ ν΄λμ€ λ΄λΆμ μμ±νλ κ²½μ°λ μ‘΄μ¬νλ€.
μ΅λͺ λ©μλμ νμ©(feat. Bubble Sort)
using System.Collections;
namespace AnonymousMethodEx
{
delegate int SelectSort(int x, int y);
class Program
{
static void BSort(int[] arr, SelectSort ss)
{
int temp = 0;
for (int i = 0; i < arr.Length - 1; i++)
{
for (int j = 0; j < arr.Length - (i+1); j++)
{
if (ss(arr[j],arr[j+1]) > 0)
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
static void Main(string[] args)
{
int[] array = { 2, 4, 1, 10, 7 };
// μ΅λͺ
ν¨μλ₯Ό μ΄μ©ν΄ λΈλ¦¬κ²μ΄νΈλ₯Ό μ μΈνκΈ°.(μ€λ¦μ°¨μ)
SelectSort ascend;
ascend = delegate(int x, int y){
if (x > y) return 1;
else if (x == y) return 0;
else return -1;
};
BSort(array, ascend);
Console.WriteLine("μ€λ¦μ°¨μ : ");
foreach (int x in array)
{
Console.Write($"{x} ");
}
Console.WriteLine();
// μ΅λͺ
ν¨μλ₯Ό μ΄μ©ν΄ λΈλ¦¬κ²μ΄νΈλ₯Ό μ μΈνκΈ°.(λ΄λ¦Όμ°¨μ)
SelectSort descend;
descend = delegate (int x, int y) {
if (x < y) return 1;
else if (x == y) return 0;
else return -1;
};
BSort(array, descend);
Console.WriteLine("λ΄λ¦Όμ°¨μ : ");
foreach (int x in array)
{
Console.Write($"{x} ");
}
Console.WriteLine();
// λ μ’μ λ°©λ²μΌλ‘ μ λ¬νλ λ©μλμμ λ°λ‘ μμ±ν μ μμ
int[] array2 = { 3, 2, 4, 1, 10, 7, 21, 42, 5, 13 };
BSort(array2, delegate(int x, int y)
{
if (x > y) return 1;
else if (x == y) return 0;
else return -1;
});
Console.WriteLine("λ©μλμ μΈμμμ μ μΈν μ΅λͺ
λ©μλ μ€λ¦μ°¨μ : ");
foreach (int x in array2)
{
Console.Write($"{x} ");
}
Console.WriteLine();
}
}
}
Output
μ€λ¦μ°¨μ :
1 2 4 7 10
λ΄λ¦Όμ°¨μ :
10 7 4 2 1
λ©μλμ μΈμμμ μ μΈν μ΅λͺ
λ©μλ μ€λ¦μ°¨μ :
1 2 3 4 5 7 10 13 21 42
μ΅λͺ ν¨μ
λ λ€μνκ² νμ©λ μ μλ€. μμ μ½λμμλμΈμ€ν΄μ€λ₯Ό μμ±ν λ μ΅λͺ ν¨μλ₯Ό μμ±νλ λ°©μ
κ³Όλ©μλμ μΈμλ‘ λκΈΈλ μ΅λͺ ν¨μλ₯Ό ν΅ν΄ λ°λ‘ μμ±νλ λ°©μ
λ κ°μ§λ₯Ό μ€μ΅νμλ€.
// μ΅λͺ
ν¨μλ₯Ό μ΄μ©ν΄ λΈλ¦¬κ²μ΄νΈλ₯Ό μ μΈνκΈ°.(μ€λ¦μ°¨μ)
SelectSort ascend;
ascend = delegate(int x, int y){
if (x > y) return 1;
else if (x == y) return 0;
else return -1;
};
BSort(array, ascend);
Console.WriteLine("μ€λ¦μ°¨μ : ");
foreach (int x in array)
{
Console.Write($"{x} ");
}
Console.WriteLine();
- 첫λ²μ§Έ λ°°μ΄μ λνμ¬ μ€λ¦μ°¨μκ³Ό λ΄λ¦Όμ°¨μ λ°©μμ΄ λκ°μ νλλ§ νμΈν΄λ³΄μ
- λ¨Όμ
SelectSort
μ λν μΈμ€ν΄μ€λ‘ascend
μΈμ€ν΄μ€λ₯Ό μμ±ν λ€ μ΅λͺ ν¨μλ₯Ό ν΅ν΄delegate
λ‘ λ©μλλ₯Ό ν λΉν κ²μ νμΈν μ μλ€.
// λ μ’μ λ°©λ²μΌλ‘ μ λ¬νλ λ©μλμμ λ°λ‘ μμ±ν μ μμ
int[] array2 = { 3, 2, 4, 1, 10, 7, 21, 42, 5, 13 };
BSort(array2, delegate(int x, int y)
{
if (x > y) return 1;
else if (x == y) return 0;
else return -1;
});
Console.WriteLine("λ©μλμ μΈμμμ μ μΈν μ΅λͺ
λ©μλ μ€λ¦μ°¨μ : ");
foreach (int x in array2)
{
Console.Write($"{x} ");
}
Console.WriteLine();
- λλ²μ§Έ λ°°μ΄μ μ λ ¬μ λν΄μλ
BSort()
λ©μλλ₯Ό νΈμΆν¨κ³Ό λμμ μΈμλ‘ μ΅λͺ ν¨μλ₯Ό μ μΈν΄ μ€μΌλ‘μ¨ λ겨주μλ€. - μμ μ½λλ₯Ό ν΅ν΄ νμΈν μ μλ€.