Сортировать часть массива структур массива C # - PullRequest
0 голосов
/ 27 мая 2019

Я бы хотел отсортировать часть массива массивов структур в 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);
        }
    }

1 Ответ

0 голосов
/ 27 мая 2019

Я думаю, вам нужно использовать Linq.

using System.Linq;

, тогда вы можете просто сделать это:

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

или использовать where и любую другую операцию Linq.

если вы хотите отсортировать только часть массивов, используйте где выбрать соответствующие массивы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...