κΉμ μ
νμΈλνκ΅ 22νλ² μ»΄ν¨ν°κ³΅νκ³Ό
νμΈλνκ΅ 22νλ² μ»΄ν¨ν°κ³΅νκ³Ό
IComparerλ λ κ°μ²΄λ₯Ό λΉκ΅νλ μΈλΆ λΉκ΅μ μΈν°νμ΄μ€μ
λλ€.int Compare(object x, object y)λ₯Ό ꡬννμ¬ λ κ°μ²΄μ ν¬κΈ° λΉκ΅λ₯Ό μνν©λλ€.class PointCompare : IComparer<Point>
{
public int Compare(Point x, Point y)
{
return x.X - y.X; // X μ’ν κΈ°μ€ λΉκ΅
}
}
IComparableμ ν΄λμ€ λ΄λΆμ λΉκ΅ κΈ°μ€μ ꡬννλ λ΄λΆ λΉκ΅μ μΈν°νμ΄μ€μ
λλ€.CompareTo λ©μλλ₯Ό ν΅ν΄ λΉκ΅ λ‘μ§μ μ 곡ν©λλ€.int CompareTo(object other)λ₯Ό ꡬννμ¬ κ°μ²΄ μμ κ³Ό λ€λ₯Έ κ°μ²΄λ₯Ό λΉκ΅ν©λλ€.class Point : IComparable<Point>
{
public int X { get; set; }
public int CompareTo(Point other)
{
return this.X - other.X; // X μ’ν κΈ°μ€ λΉκ΅
}
}
| κ΅¬λΆ | Comparer (IComparer) | Comparable (IComparable) |
|ββββββ|βββββββββββ|βββββββββββ|
| λΉκ΅μ | μΈλΆ λΉκ΅μ | λ΄λΆ λΉκ΅μ |
| μ λ ¬ κΈ°μ€ | μ¬λ¬ μ λ ¬ κΈ°μ€ κ΅¬ν κ°λ₯ | νλμ μ λ ¬ κΈ°μ€λ§ ꡬν |
| μ¬μ© λ©μλ | Compare | CompareTo |
| κ°μ²΄μ μν | κ°μ²΄λ λΉκ΅ λ‘μ§μ λͺ°λΌλ λ¨ | κ°μ²΄ μ€μ€λ‘ λΉκ΅ κΈ°μ€ μ μ |
IEnumerableμ 컬λ μ
μ΄ μν κ°λ₯νλλ‘ νλ μΈν°νμ΄μ€μ
λλ€.foreach ꡬ문μμ 컬λ μ
μ μνν μ μλλ‘ ν©λλ€.IEnumerator GetEnumerator()λ₯Ό ꡬνν©λλ€.class MyCollection : IEnumerable
{
private int[] data = { 1, 2, 3 };
public IEnumerator GetEnumerator()
{
return data.GetEnumerator();
}
}
IEnumeratorλ 컬λ μ
μ μμλ₯Ό μννλ κ°μ²΄μ
λλ€.MoveNext(): λ€μ μμλ‘ μ΄λν©λλ€.Current: νμ¬ μμλ₯Ό λ°νν©λλ€.Reset(): μ²μμΌλ‘ λμκ°λλ€.IEnumerator enumerator = myCollection.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
| κ΅¬λΆ | Enumerable (IEnumerable) | Enumerator (IEnumerator) |
|ββββββ|βββββββββββ|βββββββββββ|
| μν | 컬λ μ
μ΄ μν κ°λ₯ν¨μ λνλ | 컬λ μ
μ μμλ₯Ό νλμ© μν |
| μ 곡 λ©μλ | GetEnumerator() | MoveNext(), Current |
| μ¬μ© μμ | foreach μμ μ νΈμΆ | foreach λ΄λΆμμ μμ μ κ·Ό |
| κ΄κ³ | μ΄κ±°μλ₯Ό λ°ννλ μν | μ€μ μνλ₯Ό μννλ κ°μ²΄ |
MoveNext, Current, Resetμ ν΅ν΄ μνλ₯Ό μ μ΄ν©λλ€.