我想对C#中的结构体数组的一部分进行排序。我不想实现IComparer接口,因为它似乎涉及拳击,并且似乎没有合适的Array.Sort变体,该变体会让我定义一个lambda表达式来比较两个元素。
我的结构:
private struct ActionChainBlock
{
public int optionIndex;
public Vector2I target;
public int fitness;
}
我的数组:
private readonly ActionChainBlock[][] chains;
到目前为止,我的代码:
System.Array.Sort(chains, (x, y) =>
{
var xFitness = CalculateFitnessSum(x);
var yFitness = CalculateFitnessSum(y);
return -xFitness.CompareTo(yFitness);
});
我想做但不能做的事情
: System.Array.Sort(chains, indexStart, indexEnd, (x, y) =>
{
var xFitness = CalculateFitnessSum(x);
var yFitness = CalculateFitnessSum(y);
return -xFitness.CompareTo(yFitness);
});
CalculateFitnessSum()以ActionChainBlock []作为参数。 最有效的方法是什么?
编辑:
无法使用lambda表达式来实现,所以我实现了Comparer类:
private class ActionChainBlockComparer : IComparer<ActionChainBlock[]>
{
public int Compare(ActionChainBlock[] x, ActionChainBlock[] y)
{
var xFitness = CalculateFitnessSum(x);
var yFitness = CalculateFitnessSum(y);
return -xFitness.CompareTo(yFitness);
}
}
答案 0 :(得分:0)
我认为您需要使用Linq。
using System.Linq;
然后您可以执行以下操作:
chains.OrderBy(x => x.Sum(y => y.fitness));
或使用where和任何其他Linq操作。
如果您只想对部分数组进行排序,请使用“位置”选择相关的数组。