using System.Collections.Generic;
public InputData(string serial, int amount){
public string Serial {get; set;}
public int Amount{get;set;}
public ResultData(string serial, int amount, int newAmount, string status){
this.NewAmount = newAmount;
public ResultData(string serial, int newAmount, string status){
this.NewAmount = newAmount;
public string Serial {get; set;}
public int Amount{get;set;}
public int NewAmount{get;set;}
public string Status {get;set;}
private static Dictionary<string, InputData> CreateDictionary(List<InputData> list)
Dictionary<string, InputData> result = new Dictionary<string, InputData>();
foreach(var item in list)
result.Add(item.Serial, item);
private static List<ResultData> ProcessData(List<InputData> inputList, Dictionary<string, InputData> inputDict, string status)
List<ResultData> result = new List<ResultData>();
foreach(var item in inputList){
if(inputDict.ContainsKey(item.Serial))
result.Add(new ResultData(item.Serial, inputDict[item.Serial].Amount,item.Amount, "changed"));
result.Add(new ResultData(item.Serial, item.Amount,item.Amount, status));
public static void Main()
List<InputData> listOne = new List<InputData>
new InputData("63245-8", 10),
new InputData("08657-5", 100),
new InputData("29995-0", 500)
List<InputData> listTwo = new List<InputData>
new InputData("63245-8", 100),
new InputData("67455-1", 100),
new InputData("44187-10", 50)
Dictionary<string, InputData> dictOne = CreateDictionary(listOne);
Dictionary<string, InputData> dictTwo = CreateDictionary(listTwo);
List<ResultData> result = new List<ResultData>();
result.AddRange(ProcessData(listOne, dictTwo, "deleted"));
result.AddRange(ProcessData(listTwo, dictOne, "new"));
foreach(var item in result){
Console.WriteLine($"Serial: {item.Serial}, Amount: {item.Amount}, NewAmount:{item.NewAmount} Status: {item.Status}");