首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Array.Sort(数组,comparison<t>)是如何执行的?

Array.Sort(数组,comparison<t>)是如何执行的?
EN

Stack Overflow用户
提问于 2017-05-09 12:40:01
回答 2查看 83关注 0票数 2

我想排序数字,可作为字符串数组。经过一些查找,跟随是有用的。

代码语言:javascript
复制
Array.Sort<T> Method (T[], Comparison<T>)

但是,我想了解比较函数的执行情况。

  • 比较函数是覆盖排序方法实现,还是在执行排序方法之后调用'n‘,还是将某些函数'x’替换为传递的委托函数?
  • 我们在哪里得到我们在比较函数中的两个参数的值?

示例

代码语言:javascript
复制
       Array.Sort(unsorted, (left, right) => {
            if (left.Length != right.Length)
            {
                return left.Length - right.Length;
            }
            else
            {
                return string.CompareOrdinal(left, right);
            }
        });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-09 12:46:04

比较函数是覆盖排序方法实现,还是在执行排序方法之后调用'n‘,还是将某些函数'x’替换为传递的委托函数?

比较方法将用于在排序时比较元素。排序算法将像它那样工作(InsertionSort或QuickSort)。这是您可能需要的自定义比较。

我们在哪里得到我们在比较函数中的两个参数的值?

要比较的两个值将根据迭代在排序算法中选择。

有关示例,请参见

票数 2
EN

Stack Overflow用户

发布于 2017-05-09 13:01:57

想想这些人,你可以用名字来比较他们:

代码语言:javascript
复制
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>的定义相匹配,因为定义是“表示比较相同类型的两个对象的方法”。因此,现在,考虑到所有这些,您可以按名称对一个person数组进行排序,在Array.Sort<T> Method (T[], Comparison<T>)方法中,您可以用Person类型替换T类型的每一个分支,结果如下:

代码语言:javascript
复制
Array.Sort<Person> Method (T[], Comparison<Person>)

因此,例如,您有:

代码语言:javascript
复制
Person[] people = {p1,p2,p3...} (where p1,p2,p3... are `Person` type)

你可以:

代码语言:javascript
复制
Array.Sort(people, Person.CompareByName);

就这样..。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43870097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档