如何使用 Array.sort 按特定元素对结构数组进行排序

Ice*_*000 5 c# arrays sorting

很简单,我有一个这样的结构:

struct bla{
  string name;
  float depth;
}
Run Code Online (Sandbox Code Playgroud)

我有一个 bla 数组,我想按深度排序,首先是最大深度。代表应该做什么/返回什么?我找不到任何具体的例子。

Dav*_*ras 8

你在这里找到一个例子: 我如何对结构数组进行排序?

您有两种方法可以做到这一点,紧凑或扩展方式:

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);
});
Run Code Online (Sandbox Code Playgroud)

如果排序顺序与您想要的相反,请交换 x 或 y 或 bla1 和 bla2。


Tim*_*ter 7

您可以使用重载的Array.Sort,这需要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));
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以对原始数组进行排序,而不是创建新数组。