Example #1
0
        public Items Optimizar(ItemPrecios inputItems, float amount)
        {
            Dictionary <string, float> items = inputItems.items;

            List <float>  preciosArray   = new List <float>();
            List <string> idsArrayInput  = new List <string>();
            List <string> idsArrayOutPut = new List <string>();

            Items ItemsOutPut = new Items();

            Resultado result1 = new Resultado();
            Resultado result2 = new Resultado();
            Resultado result3 = new Resultado();


            Dictionary <string, float> itemsOutput = new Dictionary <string, float>();

            result1 = ObtenerMax(preciosArray, idsArrayInput, idsArrayOutPut, items, amount);  // resultado items original

            itemsOutput.Clear();

            foreach (KeyValuePair <string, float> kvp in items.OrderByDescending(key => key.Value))
            {
                itemsOutput.Add(kvp.Key, kvp.Value);
            }

            result2 = ObtenerMax(preciosArray, idsArrayInput, idsArrayOutPut, itemsOutput, amount);  // resultado descendente

            itemsOutput.Clear();

            foreach (KeyValuePair <string, float> kvp in items.OrderBy(key => key.Value))
            {
                itemsOutput.Add(kvp.Key, kvp.Value);
            }

            result3 = ObtenerMax(preciosArray, idsArrayInput, idsArrayOutPut, itemsOutput, amount); // resultado Ascendente

            var maximo = Math.Max(result3.amount, (Math.Max(result1.amount, result2.amount)));

            if (result1.amount == maximo)
            {
                ItemsOutPut.amount   = result1.amount;
                ItemsOutPut.item_ids = result1.ids;
            }
            else if (result2.amount == maximo)
            {
                ItemsOutPut.amount   = result2.amount;
                ItemsOutPut.item_ids = result3.ids;
            }
            else
            {
                ItemsOutPut.amount   = result3.amount;
                ItemsOutPut.item_ids = result3.ids;
            }

            return(ItemsOutPut);
        }
        public Items Resultado(Items items)
        {
            Dictionary <string, float> itemsOptimizar = new Dictionary <string, float>();


            HashSet <string> idSinRepetir = new HashSet <string>();


            foreach (string idItem in items.item_ids)
            {
                idSinRepetir.Add(idItem);
            }

            foreach (string id in idSinRepetir)
            {
                var client = new RestClient("https://api.mercadolibre.com/items/");

                var request = new RestRequest(id, Method.GET);

                var result = client.Execute(request);

                if (result.StatusCode.ToString() != "OK" && result.StatusCode.ToString() != "NotFound")
                {
                    throw new Exception("url resource https://api.mercadolibre.com/items/ unavaliable");
                }

                var producto = JsonConvert.DeserializeObject <Productos>(result.Content);

                if (producto.id != null && producto.price <= items.amount)
                {
                    itemsOptimizar.Add(id, producto.price);                                                           // Excluye productos inexistentes y con precio mayor al monto posible
                }
            }

            ArrayOptimizado Optimizado = new ArrayOptimizado();

            ItemPrecios ItemPrecios = new ItemPrecios();


            ItemPrecios.items  = itemsOptimizar;
            ItemPrecios.amount = items.amount;

            return(Optimizado.Optimizar(ItemPrecios, items.amount));
        }