сравнение значений из двух списков
Если у меня есть название товара и 2 списка с названием товаров и каким-то числом(в виде bmw=5). Как можно имея название товара найти в списке данные и сравнить их между собой? По идеи сплитом по = разделить значения 2 списков и перебором через for сравнить каждый, но что-то не получается
foreach(var zero in zeroList)
{
string[] zero_tokens = zero.Split(new[] { "=" }, StringSplitOptions.None);
for(int i = 0; i<openList_new.Count;i++)
{
if (openList_new[i].Contains(zero_tokens[0]));
{
for(int j = 0; j<oldList.Count;j++)
{
if (oldList[j].Contains(zero_tokens[0]));
{
string[] open_tokens_str = openList_new[i].Split(new[] { "=" }, StringSplitOptions.None);
string[] old_tokens_str = oldList[j].Split(new[] { "=" }, StringSplitOptions.None);
float open_tokens = float.Parse(open_tokens_str[1]);
float old_tokens = float.Parse(old_tokens_str[1]);
if(open_tokens != old_tokens)
{
//действие;
}
}
}
}
}
}
Ответы (1 шт):
Автор решения: KuzCode
→ Ссылка
Гораздо лучше сразу подготовить данные, преобразовав их в словари:
var oldData = new List<string>() // старые данные
{
"bmv=5",
"volkswagen=12",
"mazda=4",
"trash=1"
};
var newData = new List<string>() // новые данные
{
"bmv=8",
"mazda=3",
"rower=1"
};
var oldDataDictionary = oldData
.Select(data => data.Split(new[] { '=' })) // каждую строку разбиваем
.Select(data => new KeyValuePair<string, float>(data[0], float.Parse(data[1]))) // преобразуем в пары
.ToDictionary(data => data.Key, data => data.Value); // преобразуем в словарь
var newDataDictionary = newData
.Select(data => data.Split(new[] { '=' })) // каждую строку разбиваем
.Select(data => new KeyValuePair<string, float>(data[0], float.Parse(data[1]))) // преобразуем в пары
.ToDictionary(data => data.Key, data => data.Value); // преобразуем в словарь
foreach (var newDataItem in newDataDictionary)
{
var productName = newDataItem.Key; // название продукта
var newProductValue = newDataItem.Value; // новое значение
if (oldDataDictionary.ContainsKey(productName))
{
var oldProductValue = oldDataDictionary[productName]; // старое значение
// какой-то код (для примера вывод в консоль)
Console.WriteLine("[Product]: " + productName);
Console.WriteLine("Old value: " + oldProductValue);
Console.WriteLine("New value: " + newProductValue);
Console.WriteLine();
}
}
Преобразование массива строк в словарь желатеьлно вынести в отдельную функцию-расширение public static IDicionary<string, float> ConvertToDictionary(this IEnumerable<string>), для простоты примера оставлю так.
Вывод в консоль:
[Product]: bmv
Old value: 5
New value: 8
[Product]: mazda
Old value: 4
New value: 3