Помогите сделать сортировку

202
02 января 2019, 13:00

Нужно сделать сортировку двух массивов одновременно (товары и цены). Сортируется цена по убыванию, а вместе с ней и товары. Функция sort выдает ошибку выполнения. Помогите исправить.

struct Obj
{
    public string value1;
    public int value2;
}
static void Main(string[] args)
{
    string[] Products = new string[4] { "Meat", "Bread", "Milk", "Chocolate" };
    int[] Prices = new int[4] { 25, 4, 10, 16 };
    Obj[] objs = new Obj[4];
    for (int i = 0; i < 4; i++)
        Console.WriteLine(Products[i] + "\n" + Prices[i] + "\n\n");
    for (int i = 0; i < 4; i++)
    {
        objs[i] = new Obj();
        objs[i].value1 = Products[i];
        objs[i].value2 = Prices[i];
    }
    Array.Sort(objs);
    for (int i = 0; i < 4; i++)
    {
        Products[i] = objs[i].value1;
        Prices[i] = objs[i].value2;
    }
    for (int i = 0; i < 4; i++)
        Console.WriteLine(Products[i] + "\n" + Prices[i] + "\n\n");
}
Answer 1

Как Sort с одним параметром будет сравнивать структуры?

Ему нужно помочь, добавив функцию сравнения (делегат) примерно так:

Array.Sort(objs, new Comparison<Obj>((a, b) => a.price.CompareTo(b.price)));

(ideone)

Bread 4
Milk 10
Chocolate 16
Meat 25
Answer 2

Вообще, сама идея - создать структуру данных, объединяющую название и цену продукта - правильная.

Только я бы именования изменил:

struct Product
{
    public string Name;
    public int Price;
}

Однако ваш вопрос звучит так:

сделать сортировку двух массивов одновременно

Это делается элементарно использованием перегрузки метода Array.Sort, которая принимает на вход два массива:

string[] products = new string[4] { "Meat", "Bread", "Milk", "Chocolate" };
int[] prices = new int[4] { 25, 4, 10, 16 };
Array.Sort(prices, products);
for (int i = 0; i < products.Length; i++)
    Console.WriteLine(products[i] + " " + prices[i]);

Первый массив будет отсортирован по возрастанию, а элементы второго переставлены в соответствии с первым.

READ ALSO
Реферальная ссылка в Telegram, C#

Реферальная ссылка в Telegram, C#

Нужно сделать реферальную систему в Telegram BotПользователи будут переходить по ссылке, и бот должен отреагировать в ответ

171
Как правильно запустить PHP?

Как правильно запустить PHP?

Из учебника PHP взял пример:

198
Как влиять на input type date?

Как влиять на input type date?

Есть таблица в базе данных, в которой существует 4 нужных нам столбца: "date", "vsego", "zabronirovano", "nomer"

175