Simple, I have a struct like this:
struct bla{
string name;
float depth;
}
I have an bla array, and I want to sort by depth, being the greatest depth first. What should the delegate do/return? I cant find any concrete example.
Simple, I have a struct like this:
struct bla{
string name;
float depth;
}
I have an bla array, and I want to sort by depth, being the greatest depth first. What should the delegate do/return? I cant find any concrete example.
You can use the overload of Array.Sort
which takes a Comparison<T>
:
bla[] blas = new[] {
new bla() { name = "3", depth = 3 },
new bla() { name = "4", depth = 4 },
new bla() { name = "2", depth = 2 },
new bla() { name = "1", depth = 1 },
};
Array.Sort<bla>(blas, (x,y) => x.depth.CompareTo(y.depth));
On this way you sort the original array instead of creating new one.
you find an example here: How would I sort through an array of structs?
you have two ways to do this, compact or expanded way:
struct bla
{
public string name;
public float depth;
}
bla[] theArray = new bla[5];
Array.Sort(theArray, (x, y) => x.depth.CompareTo(y.depth));
Array.Sort(theArray, delegate(bla bla1, bla bla2)
{
return bla1.depth.CompareTo(bla2.depth);
});
swap x or y or bla1 and bla2 if the sort order is opposite of what you want.
using System.Linq;
blas.OrderByDescending(x=>x.depth)
or
Array.Sort(blas, (x, y) => y.depth.CompareTo(x.depth) );