이 구문에서 대리자를 사용하는 논리를 이해하지 못합니다. 나는C# 정렬 내에서이 대리자는 무엇입니까
Array.Sort (thing, delegate (Things c1, Things c2)
{
return c1.Item.CompareTo(c2.Item);
});
이 구문에서 대리자를 사용하는 논리를 이해하지 못합니다. 나는C# 정렬 내에서이 대리자는 무엇입니까
Array.Sort (thing, delegate (Things c1, Things c2)
{
return c1.Item.CompareTo(c2.Item);
});
대리인은, 익명 함수로 알려진, 당신은 다음과 같이 완전히 분리 기능을 필요없이 비교 메커니즘을 선언 할 수 있습니다 ... 문자열을 정렬하는 방법을 찾고이 건너 온거야 :
를private void button1_Click(object sender, EventArgs e)
{
Things t1 = new Things();
t1.Item = "z";
Things t2 = new Things();
t2.Item = "a";
Things[] things = new Things[]{ t1, t2};
Array.Sort(things, CompareThings);
foreach(Things t in things)
{
Console.WriteLine(t.Item);
}
}
private int CompareThings(Things c1, Things c2)
{
return c1.Item.CompareTo(c2.Item);
}
Here's an example on MSDN은 익명의 기능을 가진 하나의 버전과 위와 같이 선언 된 기능이있는 버전을 보여줍니다.
.Net은 하나의 "Things"인스턴스를 다른 인스턴스와 비교하는 방법을 모르기 때문에 부수적으로 c1.Item
을 c2.Item
으로 비교해야합니다.
public class Things : IComparable<Things>
{
public string Item = "";
int IComparable<Things>.CompareTo(Things other)
{
return this.Item.CompareTo(other.Item);
}
}
얹는 : 다음에 속하는 특정 클래스에 대한
private void button1_Click(object sender, EventArgs e)
{
Things t1 = new Things();
t1.Item = "z";
Things t2 = new Things();
t2.Item = "a";
Things[] things = new Things[]{ t1, t2};
Array.Sort(things); // <-- the intenal implementation of CompareTo() we added to class Things will be used!
foreach(Things t in things)
{
Console.WriteLine(t.Item);
}
}
당신이 IComparable 인터페이스를 구현하는 경우, 그러나, 다음 코드는 익명 또는 별도의 기능을 필요로하지 않는 청소기가된다 문자열 클래스 및 숫자 (int, float, decimal, ...)를 나타내는 클래스와 같이 IComparable (@Idle_Mind ans 참조) 인터페이스가 있으므로 은 (선택 사항)입니다. wer)가 이미 구현되었습니다.
당신은 당신이 특별한 행동을 구현 하려면이 대리자를 정의하거나 수있는 당신이에서 IComparable 구현하지 않는 비 편집 가능한 클래스 에 비교 메커니즘을 사용합니다.
당신은 일반적으로 문자열 정렬 한 고려 :
Array.Sort(sa, (x, y) => x.CompareTo(y) * -1);
이유 : 당신이 다른 방향으로 문자열을 정렬이 고려
string s = "eabdfc"; //String to sort
char[] sa = s.ToCharArray(); //Convert to array
Array.Sort(sa); //Sort without any delegate
Console.WriteLine(new string(sa)); // The new string sorted
을, 당신은에 의해에 Array.sort 라인을 대체 할 수 ? compareTo와 반환해야하므로 :
그렇다면 어떤 클래스와 함께 Array.Sort를 사용하려면 다음 중 하나를 수행해야합니다. IComparable 인터페이스 (해당되는 경우 ser 정의 된 클래스), 또는 델리게이트를 정의 할 수 있습니다.
요약 : IComparable이 클래스에 대한 기본 동작을 제공하는 동안 동일한 클래스 또는 동일한 개체에 대해 서로 다른 위치에 다른 동작을 작성할 수 있으므로 위임은 유연성을 제공합니다.
영어를 이해할 수 있기를 바랍니다. 언제든지 저를 교정하십시오.
익명 기능이라고합니다. – SLaks
도움이 될 수 있습니다. http://stackoverflow.com/questions/2122012/c-sorting-with-anonymous-function – seems