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
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.
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:
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.
population.OrderBy(x => x.weights);
or:
population.OrderByDescending(x => x.fitness);