Speeding up a search .net 4.0
        Posted  
        
            by 
                user231465
            
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by user231465
        
        
        
        Published on 2012-03-18T16:38:27Z
        Indexed on 
            2012/03/18
            17:57 UTC
        
        
        Read the original article
        Hit count: 690
        
Wondering if I can speed up the search. I need to build a functionality that has to be used by many UI screens The one I have got works but I need to make sure I am implementing a fast algoritim if you like
It's like an incremental search.
User types a word to search for eg
        const string searchFor = "Guinea";
        const char nextLetter = ' '
It looks in the list and returns 2 records
     "Guinea and Guinea Bissau "
User types a word to search for eg
        const string searchFor = "Gu";
        const char nextLetter = 'i'
    returns
    3 results.
This is the function but I would like to speed it up. Is there a pattern for this kind of search?
class Program
{
    static void Main()
    {
        //Find all countries that begin with string + a possible letter added to it
        //const string searchFor = "Guinea";
        //const char nextLetter = ' ';  //returns 2 results
        const string searchFor = "Gu";
        const char nextLetter = 'i';
        List<string> result = FindPossibleMatches(searchFor, nextLetter);
        result.ForEach(x=>Console.WriteLine(x)); //returns 3 results
        Console.Read();
    }
    /// <summary>
    /// Find all possible matches 
    /// </summary>
    /// <param name="searchFor">string to search for</param>
    /// <param name="nextLetter">pretend user as just typed  a letter</param>
    /// <returns></returns>
    public static List<string> FindPossibleMatches (string searchFor, char nextLetter)
    {
        var hashedCountryList = new HashSet<string>(CountriesList());
        var result=new List<string>();
        IEnumerable<string> tempCountryList = hashedCountryList.Where(x => x.StartsWith(searchFor));
        foreach (string item in tempCountryList)
        {
            string tempSearchItem;
            if (nextLetter == ' ')
            {
                tempSearchItem = searchFor;
            }
            else
            {
                tempSearchItem = searchFor + nextLetter;
            }
            if(item.StartsWith(tempSearchItem))
            {
                result.Add(item);
            }
        }
        return result;
    }
    /// <summary>
    /// Returns list of countries.
    /// </summary>
    public static string[] CountriesList()
    {
        return new[]
            {
                "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
                "Angola", "Anguilla", "Antarctica", "Antigua And Barbuda", "Argentina",
                "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
                "Bahamas", "Bahrain", "Bangladesh", "Barbados", "Belarus",
                "Belgium", "Belize", "Benin", "Bermuda", "Bhutan",
                "Bolivia", "Bosnia Hercegovina", "Botswana", "Bouvet Island", "Brazil",
                "Brunei Darussalam", "Bulgaria", "Burkina Faso", "Burundi", "Byelorussian  SSR",
                "Cambodia", "Cameroon", "Canada", "Cape Verde", "Cayman Islands",
                "Central African Republic", "Chad", "Chile", "China", "Christmas Island",
                "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo", "Cook Islands",
                "Costa Rica", "Cote D'Ivoire", "Croatia", "Cuba", "Cyprus",
                "Czech Republic", "Czechoslovakia", "Denmark", "Djibouti", "Dominica",
                "Dominican Republic", "East Timor", "Ecuador", "Egypt", "El Salvador",
                "England", "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia",
                "Falkland Islands", "Faroe Islands", "Fiji", "Finland", "France",
                "Gabon", "Gambia", "Georgia", "Germany", "Ghana",
                "Gibraltar", "Great Britain", "Greece", "Greenland", "Grenada",
                "Guadeloupe", "Guam", "Guatemela", "Guernsey", "Guiana",
                "Guinea", "Guinea Bissau", "Guyana", "Haiti", "Heard Islands",
                "Honduras", "Hong Kong", "Hungary", "Iceland", "India",
                "Indonesia", "Iran", "Iraq", "Ireland", "Isle Of Man",
                "Israel", "Italy", "Jamaica", "Japan", "Jersey",
                "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Korea, South",
                "Korea, North", "Kuwait", "Kyrgyzstan", "Lao People's Dem. Rep.", "Latvia",
                "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein",
                "Lithuania", "Luxembourg", "Macau", "Macedonia", "Madagascar",
                "Malawi", "Malaysia", "Maldives", "Mali", "Malta",
                "Mariana Islands", "Marshall Islands", "Martinique", "Mauritania", "Mauritius",
                "Mayotte", "Mexico", "Micronesia", "Moldova", "Monaco",
                "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar",
                "Namibia", "Nauru", "Nepal", "Netherlands", "Netherlands Antilles",
                "Neutral Zone", "New Caledonia", "New Zealand", "Nicaragua", "Niger",
                "Nigeria", "Niue", "Norfolk Island", "Northern Ireland", "Norway",
                "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea",
                "Paraguay", "Peru", "Philippines", "Pitcairn", "Poland",
                "Polynesia", "Portugal", "Puerto Rico", "Qatar", "Reunion",
                "Romania", "Russian Federation", "Rwanda", "Saint Helena", "Saint Kitts",
                "Saint Lucia", "Saint Pierre", "Saint Vincent", "Samoa", "San Marino",
                "Sao Tome and Principe", "Saudi Arabia", "Scotland", "Senegal", "Seychelles",
                "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
                "Somalia", "South Africa", "South Georgia", "Spain", "Sri Lanka",
                "Sudan", "Suriname", "Svalbard", "Swaziland", "Sweden",
                "Switzerland", "Syrian Arab Republic", "Taiwan", "Tajikista", "Tanzania",
                "Thailand", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago",
                "Tunisia", "Turkey", "Turkmenistan", "Turks and Caicos Islands", "Tuvalu",
                "Uganda", "Ukraine", "United Arab Emirates", "United Kingdom", "United States",
                "Uruguay", "Uzbekistan", "Vanuatu", "Vatican City State", "Venezuela",
                "Vietnam", "Virgin Islands", "Wales", "Western Sahara", "Yemen",
                "Yugoslavia", "Zaire", "Zambia", "Zimbabwe"
            };
    }
}
}
Any suggestions? Thanks
© Stack Overflow or respective owner