我想对数字进行排序,以字符串数组的形式提供。经过一番查找,以下内容很有用。
Array.Sort<T> Method (T[], Comparison<T>)
但是,我想了解比较函数的执行。
- 比较函数是重写 Sort 方法实现,还是在 Sort 方法执行完成后调用"n"次,或者它将用传递的委托函数替换某个函数"x"?
- 我们从哪里获得比较函数中 2 个参数的值?
例
Array.Sort(unsorted, (left, right) => {
if (left.Length != right.Length)
{
return left.Length - right.Length;
}
else
{
return string.CompareOrdinal(left, right);
}
});
比较比较函数是否覆盖排序方法实现 或者在 Sort 方法完成执行后称为"n"次,或者 它会用传递的委托函数替换某个函数"x"吗?
方法将用于在排序时比较元素。排序算法将像以前一样工作(插入排序或快速排序(。这是您可能需要的自定义比较。
我们从哪里获得我们所拥有的 2 个参数的值 比较功能?
要比较的两个值将根据迭代在排序算法中选取。
有关示例,请参阅此处。
想想这个人,你可以按名字比较他们:
public class Person
{
string name;
public static int CompareByName(Person person1, Person person2)
{
return String.Compare(person1.Name, person2.Name);
}
}
该方法CompareByName(Person person1, Person person2)
符合Comparison<T>
的定义,因为定义是"表示比较相同类型的两个对象的方法"。 所以现在,考虑到所有这些,你可以按名字对一个人的数组进行排序,在方法中,你可以Array.Sort<T> Method (T[], Comparison<T>)
T
类型的每个出现替换为Person
类型,结果是:
Array.Sort<Person> Method (T[], Comparison<Person>)
例如,您有:
Person[] people = {p1,p2,p3...} (where p1,p2,p3... are `Person` type)
你可以做:
Array.Sort(people, Person.CompareByName);
就是这样... :)