【问题标题】:How to use Array.sort to sort an array of structs, by a specific element如何使用 Array.sort 按特定元素对结构数组进行排序
【发布时间】:2012-08-15 02:46:02
【问题描述】:

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

struct bla{
  string name;
  float depth;
}

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

【问题讨论】:

    标签: c# arrays sorting


    【解决方案1】:

    你可以在这里找到一个例子:How would I sort through an array of structs?

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

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

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

    【讨论】:

      【解决方案2】:

      您可以使用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));
      

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

      【讨论】:

        【解决方案3】:

        使用System.Linq;

        blas.OrderByDescending(x=>x.depth)
        

        Array.Sort(blas, (x, y) => y.depth.CompareTo(x.depth) );
        

        【讨论】:

        • 太好了,谢谢,但你能给我举个 Array.sort 的例子吗?
        • 与 Array.Sort 看起来非常相似:Array.Sort(array, (x, y) => x.depth.CompareTo(y));
        • @CodesInChaos 有什么不礼貌的理由吗?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多