排序数组结构C#的一部分

时间:2019-05-27 09:08:04

标签: c# arrays sorting

我想对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);
        }
    }

1 个答案:

答案 0 :(得分:0)

我认为您需要使用Linq。

using System.Linq;

然后您可以执行以下操作:

chains.OrderBy(x => x.Sum(y => y.fitness));

或使用where和任何其他Linq操作。

如果您只想对部分数组进行排序,请使用“位置”选择相关的数组。