Ассоциировать данные массива с данными из другого массива

250
25 октября 2021, 08:50

У меня имеется массив в котором содержатся данные типа

компонент масса время ..
метан     0,18  1,21
этан      0,99  2,24
пропан    1,67  4,54
изобутан  4,84  6,36
i-пентан  8,45  7,41
..

Мне необходимо чтобы эти данные были записаны в другом порядке. На выходе хочу, чтобы данные из первого массива шли в строго заданном порядке:

компонент   
этан 
метан    
i-пентан 
изобутан  
пропан   

Подскажите пожалуйста максимально простое и изящное решение. Как ассоциировать первый массив с порядком который мне нужен?

Answer 1

Модель данных:

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] и т. п.

Answer 2

Класс

 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);
READ ALSO
Как сравнить объекты между собой, которые еще являются массивами?

Как сравнить объекты между собой, которые еще являются массивами?

Мне нужно сравнить объекты между собой, которые еще являются массивамиПотом сортировать их методом пузырька

66
Странное поведение Application.Quit();

Странное поведение Application.Quit();

На андроиде метод ApplicationQuit() не выходит полностью из приложения, оно просто сворачивается и выкидывает на рабочий стол, если развернуть его,...

262
Как отслеживать попадания label в panel

Как отслеживать попадания label в panel

Объясните, как можно отслеживать label, когда он попадает в panel с drag and dropФайлы как перемещать нашел, а как это делать с внутренними объектами...

157
Ошибка при отправке сообщения

Ошибка при отправке сообщения

Пытаюсь реализовать чат при помощи Signalr, для примера нашел исходник проекта, установил все необходимые npm модули, все запускается и работает

169