#c_sharp #list
Есть два списка Listlst1 = new List (){"Бренд:Zara","Вес:40гр","Размер:20*20*20"}; List lst2 = new List (){"Бренд:Mario Muzi","Вес:1230гр","Фасовка:1",}; Я в итоге хочу объединть оба списка, чтобы вывести потом в Excell. Единственная проблема - привести оба списка в единый формат, чтобы название колонок было одно. В итоге должно получиться.
Ответы
Ответ 1
Listlst1 = new List () { "Бренд:Zara", "Вес:40гр", "Размер:20*20*20" }; List lst2 = new List () { "Бренд:Mario Muzi", "Вес:1230гр", "Фасовка:1", }; List titles = new List (); lst1.ForEach(s => titles.Add(s.Substring(0, s.IndexOf(":", StringComparison.InvariantCultureIgnoreCase)))); lst2.ForEach(s => titles.Add(s.Substring(0, s.IndexOf(":", StringComparison.InvariantCultureIgnoreCase)))); titles = titles.Distinct().ToList(); //print titles .... titles.ForEach(t => Console.Write(t + "\t")); Console.WriteLine(); //For lst 1 titles.ForEach(t => { var str = lst1.Where(s => s.Contains(t)) .Select(s => s.Substring(t.Length+1)) .FirstOrDefault(); Console.Write(string.IsNullOrWhiteSpace(str)?"--\t":str+"\t"); }); Console.WriteLine(); //for lst2 //.... Ответ 2
Вам нужно создать класс описывающий товар, затем объединять списки например так: Listlst1 = new List () { new Product() { Brand = "Zara", Weight = 40, Size = "20*20*20" } }; List lst2 = new List () { new Product() { Brand = "Mario Muzi", Weight = 1230, Pre_Packing = 1 } }; List allList = lst1.Concat(lst2).ToList(); класс товара: public class Product { public string Brand { get; set; } public int Weight { get; set; } public string Size { get; set; } public int Pre_Packing { get; set; } } Ответ 3
Мой вариант будет аналогичен предложению от @Leonid Malyshev. Для хранения объединённой информации мне понадобится вспомогательный следующий класс: class MergedEntityInfo { public string Name; public string Value1; public string Value2; } Теперь предположим, что формат описания свойства "<имя>:<значение>" всегда соблюдается для обоих списков, тогда проанализируем информацию хранящуюся в первом списке: var mergedEntityInfoMap = (from entityDescription in lst1 let info = entityDescription.Split(':').ToArray() let entity = new MergedEntityInfo { Name = info[0], Value1 = info[1] } select entity) .ToDictionary(x => x.Name); Далее пройдёмся по второму списку и дополним информацию в mergedEntityInfoMap: foreach (var info in lst2.Select(x => x.Split(':').ToArray())) { MergedEntityInfo mergedEntityInfo; if (mergedEntityInfoMap.TryGetValue(info[0], out mergedEntityInfo)) { mergedEntityInfo.Value2 = info[1]; } else { mergedEntityInfoMap[info[0]] = new MergedEntityInfo { Name = info[0], Value2 = info[1] }; } } Вот и всё, в mergedEntityInfoсодержится объединённая информация.
Комментариев нет:
Отправить комментарий