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