【发布时间】:2012-08-15 02:46:02
【问题描述】:
很简单,我有一个这样的结构:
struct bla{
string name;
float depth;
}
我有一个 bla 数组,我想按深度排序,首先是最大深度。 代表应该做什么/返回?我找不到任何具体的例子。
【问题讨论】:
很简单,我有一个这样的结构:
struct bla{
string name;
float depth;
}
我有一个 bla 数组,我想按深度排序,首先是最大深度。 代表应该做什么/返回?我找不到任何具体的例子。
【问题讨论】:
你可以在这里找到一个例子: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。
【讨论】:
您可以使用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));
通过这种方式,您可以对原始数组进行排序,而不是创建新数组。
【讨论】:
使用System.Linq;
blas.OrderByDescending(x=>x.depth)
或
Array.Sort(blas, (x, y) => y.depth.CompareTo(x.depth) );
【讨论】: