使用Merge Sort按一个属性对对象数组进行排序?

时间:2015-04-03 09:01:42

标签: c# arrays sorting object merge

只是因为标题不明确。我希望能够根据其中一个属性对对象数组进行排序(比如将项目的价格从最低到最高排序)。

我设法做的是:

double[] newArray = new double[Obj.Length];
while loop{
newArray[ctr] = Obj[ctr].price
}

这意味着newArray具有对象数组的PRICE属性。我能够解决这个问题。

但是,我不明白我是如何调整Merge排序算法的(请注意我必须在这里使用合并排序,而不是一些内置的Array.Sort函数)。这是因为合并排序是递归的,所以使用对象数组作为参数,在我看来似乎不可行。

我希望这是有道理的,如果需要任何澄清,我会编辑。

1 个答案:

答案 0 :(得分:0)

两种可能的选择是:

  1. 如果您将属性名称作为字符串给出,那么假设要比较的属性是实现IComparable接口的类型,那么您使用反射从对象中提取属性值比较。

  2. 或者,您可以让mergesort接受比较逻辑的委托(例如int Compare(obj x, obj y)Func<T, T, TRes>)并使用此委托来比较对象。