Я бы хотел отсортировать часть массива массивов структур в C #. Я не хочу реализовывать интерфейс IComparer, так как кажется, что он включает в себя упаковку, и не существует подходящего варианта Array.Sort, который позволил бы мне определить лямбда-выражение для сравнения двух элементов.
Моя структура:
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 [] в качестве аргумента.
Какой самый эффективный способ сделать это?
EDIT:
Не удалось сделать это с лямбда-выражением, поэтому я реализовал класс 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);
}
}