У меня имеется массив в котором содержатся данные типа
компонент масса время ..
метан 0,18 1,21
этан 0,99 2,24
пропан 1,67 4,54
изобутан 4,84 6,36
i-пентан 8,45 7,41
..
Мне необходимо чтобы эти данные были записаны в другом порядке. На выходе хочу, чтобы данные из первого массива шли в строго заданном порядке:
компонент
этан
метан
i-пентан
изобутан
пропан
Подскажите пожалуйста максимально простое и изящное решение. Как ассоциировать первый массив с порядком который мне нужен?
Модель данных:
public class Component
{
public string Name { get; set; }
public double Weight { get; set; }
public double Time { get; set; }
}
Заполняем массив данных и массив ключей. Сортируем.
var items = new Component[]
{
new Component { Name = "метан", Weight = 0.18, Time = 1.21 },
new Component { Name = "этан", Weight = 0.99, Time = 2.24 },
new Component { Name = "пропан", Weight = 1.67, Time = 4.54 },
new Component { Name = "изобутан", Weight = 4.84, Time = 6.36 },
new Component { Name = "i-пентан", Weight = 8.45, Time = 7.41 },
};
var keys = new int[] { 1, 0, 4, 3, 2 };
Array.Sort(keys, items);
Используется перегрузка метода Array.Sort,
где keys
- ключи (веса), по которым сортировать, items
- данные.
Ключи можно задавать в любом виде. Я использовал значения [0..4]. С таким же успехом это могут быть [1..5] или [100..104] или [1001..1005] и т. п.
Класс
public class Component
{
public string ComponentName;
public double Wight;
public double Time;
//ctor
public Component(string componentName, double wight, double time )
{
ComponentName = componentName;
Wight = wight;
Time = time;
}
}
не сортированные данные
List<Component>componentData = new List<Component>();
Component mentan = new Component("Ментан",0.18,1.21);
componentData.Add(mentan);
Component etam = new Component("Этан", 0.99, 2.24);
componentData.Add(etam);
Component propan = new Component("Пропан",1.67, 4.54);
componentData.Add(propan);
Component izobutan = new Component("Изобутан", 4.84, 6.36);
componentData.Add(izobutan);
Component ipetan = new Component("i-Петан", 8.45, 7.41);
componentData.Add(ipetan);
метод для сортировки
public List<Component> SorComponents(List<Component> unsorted)
{
List<Component>componentsSorted = new List<Component>();
int j =0;
while (true)
{
for (int i = 0; i < unsorted.Count; i++)
{
if (unsorted[i].ComponentName == "Ментан" && j==1)
{
componentsSorted.Add(unsorted[i]);
j++;
break;
}
if (unsorted[i].ComponentName == "Этан" && j==0)
{
componentsSorted.Add(unsorted[i]);
j++;
break;
}
if (unsorted[i].ComponentName == "Пропан" && j==4)
{
componentsSorted.Add(unsorted[i]);
j++;
break;
}
if (unsorted[i].ComponentName == "Изобутан" && j==3)
{
componentsSorted.Add(unsorted[i]);
j++;
break;
}
if (unsorted[i].ComponentName == "i-Петан" && j==2)
{
componentsSorted.Add(unsorted[i]);
j++;
break;
}
}
if (j == 5)
{
return componentsSorted;
}
}
}
Сортируем
var sortedData = SorComponents(componentData);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Мне нужно сравнить объекты между собой, которые еще являются массивамиПотом сортировать их методом пузырька
На андроиде метод ApplicationQuit() не выходит полностью из приложения, оно просто сворачивается и выкидывает на рабочий стол, если развернуть его,...
Объясните, как можно отслеживать label, когда он попадает в panel с drag and dropФайлы как перемещать нашел, а как это делать с внутренними объектами...
Пытаюсь реализовать чат при помощи Signalr, для примера нашел исходник проекта, установил все необходимые npm модули, все запускается и работает