Как назначить новое расположение массива другому массиву в C#? - PullRequest
0 голосов
/ 01 мая 2020

Допустим, я получил следующий ввод:

12 15
13 19
9 20
5 40
20 10

Я хочу отсортировать этот список с помощью быстрой сортировки на основе первых значений кортежей (12, 13, 9, 5, 20). Поэтому я бы создал два массива, A и B, A для 12, 13, 9, 5, 20 и B для 15, 19, 20, 40, 10.

Я отсортирую A, используя быструю сортировку и получить 5, 9, 12, 13 и 20. Как получить другую половину значений, чтобы изменить свои позиции так, чтобы она соответствовала начальным кортежам? Поэтому, если у меня есть 5, 9, 12, 13 и 20, я также хочу получить 40, 20, 15, 19 и 10 в этом порядке.

Ответы [ 3 ]

0 голосов
/ 01 мая 2020

Вы можете отсортировать их как кортежи, а затем создать a и b, используя Select:

var data = new (int, int)[]
{
    (12, 15),
    (13, 19),
    (9, 20),
    (5, 40),
    (20, 10)
};

Array.Sort(data, (left, right) => left.Item1.CompareTo(right.Item1));

var a = data.Select(item => item.Item1).ToArray();
var b = data.Select(item => item.Item2).ToArray();

Возможно, вы захотите спросить себя, нужны ли вам эти два массива в первую очередь , Один массив (data) содержит все необходимое и позволяет легко получить соответствующее значение.

0 голосов
/ 01 мая 2020

Если у вас есть два массива a и b, вы можете отсортировать их, используя метод Array.Sort(keys, values). Элементы обоих массивов сортируются в соответствии со значениями массива keys:

int[] a = {12, 13, 9, 5, 20};
int[] b = {15, 19, 20, 40, 10};
Array.Sort(a, b);

Это приведет к следующему результату:

5,   9, 12, 13, 20
40, 20, 15, 19, 10

Вот полный пример .

0 голосов
/ 01 мая 2020

Вопрос здесь таков: почему вы сначала создаете два массива?

Как насчет того, чтобы создать небольшую структуру, в которой хранятся два компонента (или просто использовать тип кортежа C#, предоставляемый с C # 7), поместите это в массив и отсортируйте по одному из членов.

Например, можно использовать что-то вроде этого:

struct Element
{
    public int A;
    public int B;
}

А затем в вашем коде вы просто сортировка по A. Когда вы затем читаете из массива, вы получаете оба в нужном порядке. Если они понадобятся вам позже в двух отдельных массивах, вы можете просто извлечь значения снова.

...