private void UpdateMatchedShirtSizeCount(SearchResults results, Shirt shirt)
 {
     results.SizeCounts.Single(x => x.Size == shirt.Size).Count += 1;
 }
 private void UpdateMatchedShirtColorCount(SearchResults results, Shirt shirt)
 {
     results.ColorCounts.Single(x => x.Color == shirt.Color).Count += 1;
 }
Ejemplo n.º 3
0
        public SearchResults Search(SearchOptions options)
        {
            var searchResults = new SearchResults
            {
                SizeCounts  = new List <SizeCount>(),
                ColorCounts = new List <ColorCount>(),
            };

            foreach (var size in Size.All)
            {
                searchResults.SizeCounts.Add(new SizeCount {
                    Size = size
                });
            }

            foreach (var color in Color.All)
            {
                searchResults.ColorCounts.Add(new ColorCount {
                    Color = color
                });
            }

            var matches = new Dictionary <Guid, Shirt>();

            // Find results where colour & size options are specified
            foreach (var optionsColor in options.Colors)
            {
                foreach (var optionsSize in options.Sizes)
                {
                    foreach (var shirt in _lookup[optionsSize][optionsColor])
                    {
                        matches[shirt.Id] = shirt;
                        searchResults.SizeCounts.Single(x => Equals(x.Size, optionsSize)).Count++;
                        searchResults.ColorCounts.Single(x => Equals(x.Color, optionsColor)).Count++;
                    }
                }
            }

            // Find results where only colour options are specified
            if (!options.Sizes.Any())
            {
                foreach (var optionsColor in options.Colors)
                {
                    foreach (var shirt in _colourLookup[optionsColor])
                    {
                        matches[shirt.Id] = shirt;

                        searchResults.ColorCounts.Single(x => Equals(x.Color, optionsColor)).Count++;
                    }
                }
            }

            // Find results where only size options are specified
            if (!options.Colors.Any())
            {
                foreach (var optionsSize in options.Sizes)
                {
                    foreach (var shirt in _sizeLookup[optionsSize])
                    {
                        matches[shirt.Id] = shirt;

                        searchResults.SizeCounts.Single(x => Equals(x.Size, optionsSize)).Count++;
                    }
                }
            }

            searchResults.Shirts = matches.Values.ToList();

            return(searchResults);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Another searching method based on 'for statement' and dealing with the lists as simple arrays without using any predicates
        /// </summary>
        /// <param name="options"></param>
        /// <returns></returns>
        public SearchResults Search_2(SearchOptions options)
        {
            //TODO: search logic goes here.



            if (options.Colors.Count == 0 && options.Sizes.Count != 0)
            {
                for (int shirtIndex = 0; shirtIndex < options.Sizes.Count; shirtIndex++)
                {
                    foreach (var shirt in _shirts)
                    {
                        if (options.Sizes[shirtIndex].Name.Equals(shirt.Size.Name))
                        {
                            ShirtsFound.Add(shirt);

                            ClCounts[ColorsIndex[shirt.Color.Name]].Count++;
                            SzCounts[SizesIndex[shirt.Size.Name]].Count++;
                        }
                    }
                }
            }

            else if (options.Sizes.Count == 0 && options.Colors.Count != 0)
            {
                for (int shirtIndex = 0; shirtIndex < options.Colors.Count; shirtIndex++)
                {
                    foreach (var shirt in _shirts)
                    {
                        if (options.Colors[shirtIndex].Name.Equals(shirt.Color.Name))
                        {
                            ShirtsFound.Add(shirt);
                            ClCounts[ColorsIndex[shirt.Color.Name]].Count++;
                            SzCounts[SizesIndex[shirt.Size.Name]].Count++;
                        }
                    }
                }
            }
            else
            {
                for (int shirtIndex = 0; shirtIndex < options.Sizes.Count; shirtIndex++)
                {
                    foreach (var shirt in _shirts)
                    {
                        if (options.Sizes[shirtIndex].Name.Equals(shirt.Size.Name))
                        {
                            if (options.Colors[shirtIndex].Name.Equals(shirt.Color.Name))
                            {
                                ShirtsFound.Add(shirt);
                                ClCounts[ColorsIndex[shirt.Color.Name]].Count++;
                                SzCounts[SizesIndex[shirt.Size.Name]].Count++;
                            }
                        }
                    }
                }
            }



            SearchResults sr = new SearchResults();

            sr.Shirts      = ShirtsFound;
            sr.SizeCounts  = SzCounts;
            sr.ColorCounts = ClCounts;
            return(sr);
        }
Ejemplo n.º 5
0
        private void SearchWithSizeAndColor(SearchOptions options, SearchResults searchResult)
        {
            foreach (var color in options.Colors)
            {
                foreach (var size in options.Sizes)
                {
                    switch (color.Name + size.Name)
                    {
                    case "BlackSmall":
                        var countBlackSmall = _sortedShirts["BlackSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlackSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count    += countBlackSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Black).FirstOrDefault().Count += countBlackSmall;
                        break;

                    case "BlackMedium":
                        var countBlackMedium = _sortedShirts["BlackMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlackMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count   += countBlackMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Black).FirstOrDefault().Count += countBlackMedium;
                        break;

                    case "BlackLarge":
                        var countBlackLarge = _sortedShirts["BlackLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlackLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count    += countBlackLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Black).FirstOrDefault().Count += countBlackLarge;
                        break;

                    case "WhiteSmall":
                        var countWhiteSmall = _sortedShirts["WhiteSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["WhiteSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count    += countWhiteSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.White).FirstOrDefault().Count += countWhiteSmall;
                        break;

                    case "WhiteMedium":
                        var countWhiteMedium = _sortedShirts["WhiteMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["WhiteMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count   += countWhiteMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.White).FirstOrDefault().Count += countWhiteMedium;

                        break;

                    case "WhiteLarge":
                        var countWhiteLarge = _sortedShirts["WhiteLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["WhiteLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count    += countWhiteLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.White).FirstOrDefault().Count += countWhiteLarge;

                        break;

                    case "YellowSmall":
                        var countYellowSmall = _sortedShirts["YellowSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["YellowSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count     += countYellowSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Yellow).FirstOrDefault().Count += countYellowSmall;

                        break;

                    case "YellowMedium":
                        var countYellowMedium = _sortedShirts["YellowMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["YellowMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count    += countYellowMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Yellow).FirstOrDefault().Count += countYellowMedium;

                        break;

                    case "YellowLarge":
                        var countYellowLarge = _sortedShirts["YellowLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["YellowLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count     += countYellowLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Yellow).FirstOrDefault().Count += countYellowLarge;

                        break;

                    case "BlueSmall":
                        var countBlueSmall = _sortedShirts["BlueSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlueSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count   += countBlueSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Blue).FirstOrDefault().Count += countBlueSmall;

                        break;

                    case "BlueMedium":
                        var countBlueMedium = _sortedShirts["BlueMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlueMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count  += countBlueMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Blue).FirstOrDefault().Count += countBlueMedium;

                        break;

                    case "BlueLarge":
                        var countBlueLarge = _sortedShirts["BlueLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["BlueLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count   += countBlueLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Blue).FirstOrDefault().Count += countBlueLarge;

                        break;

                    case "RedSmall":
                        var countRedSmall = _sortedShirts["RedSmall"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["RedSmall"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Small).FirstOrDefault().Count  += countRedSmall;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Red).FirstOrDefault().Count += countRedSmall;

                        break;

                    case "RedMedium":
                        var countRedMedium = _sortedShirts["RedMedium"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["RedMedium"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Medium).FirstOrDefault().Count += countRedMedium;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Red).FirstOrDefault().Count += countRedMedium;

                        break;

                    case "RedLarge":
                        var countRedLarge = _sortedShirts["RedLarge"].Count();
                        searchResult.Shirts.AddRange(_sortedShirts["RedLarge"]);
                        searchResult.SizeCounts.Where(x => x.Size == Size.Large).FirstOrDefault().Count  += countRedLarge;
                        searchResult.ColorCounts.Where(x => x.Color == Color.Red).FirstOrDefault().Count += countRedLarge;

                        break;

                    default:
                        break;
                    }
                }
            }
        }
Ejemplo n.º 6
0
        public SearchResults LookupSearch(SearchOptions options)
        {
            //Intitialize search result
            SearchResults results = new SearchResults()
            {
                ColorCounts = new List <ColorCount>(),
                SizeCounts  = new List <SizeCount>(),
                Shirts      = new List <Shirt>()
            };

            // Convert to Lookup
            Stopwatch sw = new Stopwatch();

            sw.Start();
            var shirtsLookup = _shirts.ToLookup(x => new { x.Color, x.Size });

            sw.Stop();
            results.Milliseconds = sw.ElapsedMilliseconds;

            //Search
            if (options != null)
            {
                foreach (Color color in options.Colors)
                {
                    ColorCount colorCount = new ColorCount()
                    {
                        Color = color, Count = 0
                    };

                    foreach (Size sz in Size.All)
                    {
                        var colourMatchedShirts = shirtsLookup[new { Color = color, Size = sz }];
                        if (options.Sizes.Contains(sz) && options.Sizes.Count > 0)
                        {
                            if (colourMatchedShirts.Count() > 0)
                            {
                                colorCount.Count += colourMatchedShirts.Count();
                                results.Shirts.AddRange(colourMatchedShirts.ToList <Shirt>());
                                SizeCount sizeCount = results.SizeCounts.Find(item => item.Size.Name.Equals(sz.Name));
                                if (sizeCount == null)
                                {
                                    results.SizeCounts.Add(new SizeCount {
                                        Size = sz, Count = colourMatchedShirts.Count()
                                    });
                                }
                                else
                                {
                                    sizeCount.Count++;
                                }
                            }
                        }
                        else if (options.Sizes.Count == 0)
                        {
                            colorCount.Count += colourMatchedShirts.Count();
                        }
                    }
                    results.ColorCounts.Add(colorCount);
                }
            }
            return(results);
        }