Sort array of object in C# (equivalent of std::sort)

前端 未结 3 858
离开以前
离开以前 2021-01-21 16:19

How can I sort array of strings ascending in c#, I want use something like std::sort in C++:

 std::sort(population.begin(), population.end())

I

相关标签:
3条回答
  • 2021-01-21 16:35

    Unlike C++ which relies on operator< for sorting, C# relies on implementation of IComparable<T> by your class, or takes an external comparer passed to Sort method:

    class Genome : IComparable<Genome> {
        public int CompareTo(Genome other) {
            return fitness.CompareTo(other.fitness);
        }
    }
    

    Can operator overloaded for < be used, like in C++?

    IComparable<T> is slightly more complex than <, because it returns zero when objects are equal. You can express the same logic using < and >, but it is easier to implement IComparable<T> interface directly.

    0 讨论(0)
  • 2021-01-21 16:37

    The way that You are defining the order of objects (< and >) is not right for C#.

    You need to realize the IComparable interface. It has only one method:

    public interface IComparable
    {
       int CompareTo(object o);
    }
    

    The CompareTo method is used for comparing the object with some other object. It returns a number:

    1. less 0. The current object will be before the object which is in argument
    2. equals 0. Two objects are equal
    3. More than 0. Current object will be after the object which is in argument

    For example:

    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
          }
    }
    

    In Your case, You just need to return this.fitness-p.fitness.

    0 讨论(0)
  • 2021-01-21 16:59
    population.OrderBy(x => x.weights); 
    

    or:

    population.OrderByDescending(x => x.fitness); 
    
    0 讨论(0)
提交回复
热议问题