How to use Array.sort to sort an array of structs, by a specific element

20,592

Solution 1

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.

Solution 2

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.

Solution 3

using System.Linq;

blas.OrderByDescending(x=>x.depth)

or

Array.Sort(blas, (x, y) => y.depth.CompareTo(x.depth) );
Share:
20,592
Icebone1000
Author by

Icebone1000

conceptArt.org sketchbook deviantArt gallery

Updated on July 05, 2022

Comments

  • Icebone1000
    Icebone1000 almost 2 years

    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.

  • Icebone1000
    Icebone1000 over 11 years
    Great, thanx, but would you give me an example with Array.sort?
  • Pavel Bakshy
    Pavel Bakshy over 11 years
    With Array.Sort it looks very similar: Array.Sort(array, (x, y) => x.depth.CompareTo(y));
  • L.B
    L.B over 11 years
    @CodesInChaos any reason to be rude?