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

后端 未结 3 530

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

相关标签:
3条回答
  • 2021-01-14 01:09

    using System.Linq;

    blas.OrderByDescending(x=>x.depth)
    

    or

    Array.Sort(blas, (x, y) => y.depth.CompareTo(x.depth) );
    
    0 讨论(0)
  • 2021-01-14 01:26

    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.

    0 讨论(0)
  • 2021-01-14 01:26

    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.

    0 讨论(0)
提交回复
热议问题