public bool EqualsResults(PackageResultsProfile.RootObject a, PackageResultsProfile.RootObject b) { bool resultatEquals = false; //если пришел пустой ответ if ((a.combinations.Count == 0) && (b.combinations.Count == 0)) { return(false); } //для итерации первого объекта for (int iterascombinObA = 0; a.combinations.Count != iterascombinObA; iterascombinObA++) { //для итерации второго объекта for (int iterascombinObB = 0; b.combinations.Count != iterascombinObB; iterascombinObB++) { //для итерации отелей for (int otelA = 0; a.combinations[iterascombinObA].hotels.Count != otelA; otelA++) { for (int otelB = 0; b.combinations[iterascombinObB].hotels.Count != otelB; otelB++) { //итерация рутов for (int routesA = 0; a.combinations[iterascombinObA].flight.routes.Count != routesA; routesA++) { for (int routesB = 0; b.combinations[iterascombinObB].flight.routes.Count != routesB; routesB++) { for (int segmentsA = 0; a.combinations[iterascombinObA].flight.routes[routesA].segments.Count != segmentsA; segmentsA++) { Program program = new Program(); resultatEquals = program.ZaprosSravneniePackageResultsProfileRootObject(a, b, iterascombinObA, iterascombinObB, otelA, otelB, routesA, routesA, segmentsA, segmentsA); ///true, если указанные объекты равны; в противном случае — false.Если оба параметра objA и objB имеют значение NULL, метод возвращает значение true. //resultatEquals = Equals(a.combinations[iterascombinObA], b.combinations[iterascombinObB]); //string jsoncombAFlight = JsonConvert.SerializeObject(a.combinations[iterascombinObA].flight); //string jsoncombAHotel = JsonConvert.SerializeObject(a.combinations[iterascombinObA].hotels); //string jsoncombBFlight = JsonConvert.SerializeObject(b.combinations[iterascombinObB].flight); //string jsoncombBHotel = JsonConvert.SerializeObject(b.combinations[iterascombinObB].hotels); //resultatEquals = (jsoncombAFlight == jsoncombBFlight) && (jsoncombAHotel == jsoncombBHotel); if (resultatEquals) { return(false); } } } } } } } } return(true); }
/// <summary> /// сравнение происходит между двумя объектами, в начале сравниваеся отели по кол-ву, далее если кол-во одинаково по цене, типу отеля, звездам, если равны далее по роутам если равны далее /// по кол-ву сегементов, далее каждый роут сравниваеся особенным образом, так как 1 маршрут будет из /// </summary> /// <param name="a"></param> /// <param name="b"></param> /// <param name="iterascombinObA"></param> /// <param name="iterascombinObB"></param> /// <param name="otelA"></param> /// <param name="otelB"></param> /// <param name="routsA"></param> /// <param name="routsB"></param> /// <param name="segmentsA"></param> /// <param name="segmentsB"></param> /// <returns></returns> public bool ZaprosSravneniePackageResultsProfileRootObject(PackageResultsProfile.RootObject a, PackageResultsProfile.RootObject b, int iterascombinObA, int iterascombinObB, int otelA, int otelB, int routsA, int routsB, int segmentsA, int segmentsB) { ///Сравнение двух объектов, ///проверка по кол-ву отелей, далее номер отеля совпадает (пример первый отель 1го объекта будет сравниваться только с 1ым объектом второго объекта, если 2ой то со 2ым и т.д.). ///проверка по цене отеля ///проверка по типу отеля ///проверка по звездам отеля ///сравнение цены за билет flight. ///Проверка по роутам. Сравнивается первый полет с первым полетом другого объекта. ///Для того чтобы не было лишних сравниний (пример из А в Б и из Б в А). /// Сравнение по сервис классу и сервис класс типу bool resultatEquals = a.combinations[iterascombinObA].hotels.Count == b.combinations[iterascombinObB].hotels.Count && a.combinations[iterascombinObA].hotels[otelA].price == b.combinations[iterascombinObB].hotels[otelB].price && a.combinations[iterascombinObA].hotels[otelA].hotelType == b.combinations[iterascombinObB].hotels[otelB].hotelType && a.combinations[iterascombinObA].hotels[otelA].stars == b.combinations[iterascombinObB].hotels[otelB].stars && a.combinations[iterascombinObA].flight.price == b.combinations[iterascombinObB].flight.price && a.combinations[iterascombinObA].flight.routes.Count == b.combinations[iterascombinObB].flight.routes.Count && a.combinations[iterascombinObA].flight.routes[routsA].segments.Count == b.combinations[iterascombinObB].flight.routes[routsA].segments.Count && a.combinations[iterascombinObA].flight.routes[routsA].segments[segmentsA].serviceClass == b.combinations[iterascombinObB].flight.routes[routsA].segments[segmentsA].serviceClass && a.combinations[iterascombinObA].flight.routes[routsA].segments[segmentsA].serviceClassType == b.combinations[iterascombinObB].flight.routes[routsA].segments[segmentsA].serviceClassType; //Console.WriteLine(" шаг итерации i комбо первого объекта {0}, шаг итерации роутес {1}, шаг итерации сегментов {2} ", iterascombinObA, routsA, segmentsA); //Console.WriteLine(" шаг итерации i комбо второго объекта {0}, шаг итерации роутес {1} ", iterascombinObB, routsB); //Console.WriteLine("a.combinations[iterascombinObA].flight.routes[routsA].segments[segmentsA].serviceClass {0} == b.combinations[iterascombinObB].flight.routes[routsA].segments[segmentsA].serviceClass {1}", a.combinations[iterascombinObA].flight.routes[routsA].segments[segmentsA].serviceClass, b.combinations[iterascombinObB].flight.routes[routsA].segments[segmentsA].serviceClass); //Console.WriteLine("a.combinations[iterascombinObA].flight.routes[routsA].segments[segmentsA].serviceClassType {0} == b.combinations[iterascombinObB].flight.routes[routsA].segments[segmentsA].serviceClassType {1}", a.combinations[iterascombinObA].flight.routes[routsA].segments[segmentsA].serviceClassType, b.combinations[iterascombinObB].flight.routes[routsA].segments[segmentsA].serviceClassType); //Console.WriteLine(""); //нижняя строка для отлова булево через отладку. //if (resultatEquals) return resultatEquals; return(resultatEquals); }