c# - 加快 .net 4.0 搜索速度

标签 c# .net-4.0

想知道是否可以加快搜索速度。 我需要构建一个必须由许多 UI 屏幕使用的功能 我拥有的算法可以工作,但如果您愿意,我需要确保我正在实现一种快速算法

这就像增量搜索。

用户输入要搜索的单词,例如

        const string searchFor = "Guinea";
        const char nextLetter = ' '

它在列表中查找并返回 2 条记录

     "Guinea and Guinea Bissau "

用户输入要搜索的单词,例如

        const string searchFor = "Gu";
        const char nextLetter = 'i'

    returns
    3 results.

这就是函数,但我想加快速度。 这种搜索有模式吗?

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"
            };
    }
}

}

有什么建议吗? 谢谢

最佳答案

用于前缀搜索的数据结构是TRIE。您可以在这里阅读有关数据结构的更多信息: http://en.wikipedia.org/wiki/Trie

您可以在以下链接中找到 trie 的几个 C# 实现: http://www.kerrywong.com/2006/04/01/implementing-a-trie-in-c/

https://codereview.stackexchange.com/questions/2195/is-this-a-reasonable-trie-implementation

希望这有助于提高速度。

关于c# - 加快 .net 4.0 搜索速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9760083/

相关文章:

c# - 也许在 Linq 中找到了一个功能。具有多个字段的 Groupby

c# - 从 datagridview 选择数据并重新插入选择 c#

c# - ObjectDisposedException - 在 GUI 线程中运行秒表

不同机器上的 C# 内存泄漏

c# - Windows 8 是否对应用程序有更严格的权限?

.net - NHibernate 支持.NET 4.0 框架吗?

c# - 如何更改已从 C# 代码过期的 sql server 密码?

c# - 在根中插入证书(带有私钥),.NET 4 中的本地计算机证书存储失败

c# - 从 .net 4 c# 中取消阻止文件

asp.net - 从复选框列表控件的外部跨度中删除禁用的属性