首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C#中对对象数组进行排序(等效于std:: Sort )

在C#中对对象数组进行排序(等效于std:: Sort )
EN

Stack Overflow用户
提问于 2016-07-17 18:34:41
回答 3查看 3.9K关注 0票数 3

如何在c#中对上升的字符串数组进行排序,我希望使用诸如std::C++中的排序:

代码语言:javascript
复制
 std::sort(population.begin(), population.end())

我需要整理一下表。列表中的对象是Genome类的实例。我在该类中重载了操作符<和运算符>

代码语言:javascript
复制
 class Genome
{
    public List<double> weights;
    public double fitness;

    public Genome()
    {
        fitness = 0.0;
        weights = new List<double>();
    }

    public Genome(List<double> weights, double fitness) {
        this.weights = weights;
        this.fitness = fitness;
    }


    public static bool operator <(Genome lhs, Genome rhs)
    {
        return (lhs.fitness < rhs.fitness);
    }

    public static bool operator >(Genome lhs, Genome rhs) {
        return (lhs.fitness > rhs.fitness);
    }

}

人口就是这样被宣布的:

代码语言:javascript
复制
List<Genome> population = new List<Genome>();

如何对这个数组进行排序??可以使用操作符重载操作符<类似在C++中吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-17 18:36:58

代码语言:javascript
复制
population.OrderBy(x => x.weights); 

或者:

代码语言:javascript
复制
population.OrderByDescending(x => x.fitness); 
票数 6
EN

Stack Overflow用户

发布于 2016-07-17 18:37:37

与依赖于C++进行排序的operator<不同,C#依赖于类对IComparable<T>的实现,或者使用传递给Sort方法的外部比较器:

代码语言:javascript
复制
class Genome : IComparable<Genome> {
    public int CompareTo(Genome other) {
        return fitness.CompareTo(other.fitness);
    }
}

可以使用<的操作符重载吗,就像在C++中那样?

IComparable<T><稍微复杂一些,因为当对象相等时,它返回零。您可以使用<>表示相同的逻辑,但是直接实现IComparable<T>接口更容易。

票数 2
EN

Stack Overflow用户

发布于 2016-07-17 18:44:15

定义对象顺序(<和>)的方式不适合C#。

您需要实现IComparable接口。它只有一种方法:

代码语言:javascript
复制
public interface IComparable
{
   int CompareTo(object o);
}

CompareTo方法用于将对象与其他对象进行比较。它返回一个数字:

  1. 减0。当前对象将在参数对象之前。
  2. 等于0。两个对象是相等的
  3. 超过0。当前对象将在参数中的对象之后。

例如:

代码语言:javascript
复制
class Paper: IComparable
{
   public int width;
   public int height;
   public int CompareTo(object o)
   {
      Paper p = o as Paper;
      if (p!=null)
      {
          return this.width*this.height-p.width*p.height
      }
}

在你的情况下,你只需要把这个还给你。

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

https://stackoverflow.com/questions/38424626

复制
相关文章

相似问题

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