Нужно сделать сортировку двух массивов одновременно (товары и цены). Сортируется цена по убыванию, а вместе с ней и товары. Функция 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");
}
Как Sort с одним параметром будет сравнивать структуры?
Ему нужно помочь, добавив функцию сравнения (делегат) примерно так:
Array.Sort(objs, new Comparison<Obj>((a, b) => a.price.CompareTo(b.price)));
(ideone)
Bread 4
Milk 10
Chocolate 16
Meat 25
Вообще, сама идея - создать структуру данных, объединяющую название и цену продукта - правильная.
Только я бы именования изменил:
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]);
Первый массив будет отсортирован по возрастанию, а элементы второго переставлены в соответствии с первым.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей