Array.Sort(array, comparison<t>) 如何执行?



我想对数字进行排序,以字符串数组的形式提供。经过一番查找,以下内容很有用。

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);

就是这样... :)

相关内容

最新更新