读书人

这种按字母快速检索是如何实现的

发布时间: 2012-10-27 10:42:26 作者: rapoo

这种按字母快速检索是怎么实现的?
比如有
挑灯夜读
阿拉伯电脑
晚上银行
电子书籍
美女跳舞

等等

我在textbox框里输入T
下拉列表显示 挑灯夜读
美女跳舞
让我选择

这里基于的原理是 汉字字母的拼音字母,挑灯夜读的挑 是T开头的,美女跳舞的跳是T开头的

这个怎么实现?
我想到,一种笨方法是,提前在数据库里对每个汉字组合都附带所有的拼音首字母的字段
比如挑灯夜读,我对应加3个字段 T D Y

不过好像这样太笨了,如果这些数据是动态添加的或者字很多那不得累死啊
不知道有什么好一点的办法可以实现这个效果??


[解决办法]
我就是用这种笨方法实现的, 在动态添加数据时, 同步获取该数据的拼音码字母。
如下:

C# code
        /// <summary>        /// 得到每个汉字的字首拼音码字母(大写)        /// </summary>        /// <param name="chrStr">输入字符串</param>        /// <returns>返回结果</returns>        public string GetHeadCharacter(string chrStr)        {            string strHeadString = string.Empty;            Encoding gb = System.Text.Encoding.GetEncoding("gb2312");            for (int i = 0; i < chrStr.Length; i++)            {                //检测该字符是否为汉字                if (!IsChineseCharacters(chrStr.Substring(i, 1)))                {                    strHeadString += chrStr.Substring(i, 1);                    continue;                }                byte[] bytes = gb.GetBytes(chrStr.Substring(i, 1));                string lowCode = System.Convert.ToString(bytes[0] - 0xA0, 16);                string hightCode = System.Convert.ToString(bytes[1] - 0xA0, 16);                int nCode = Convert.ToUInt16(lowCode, 16) * 100 + Convert.ToUInt16(hightCode, 16);      //得到区位码                strHeadString += FirstLetter(nCode);            }            return strHeadString;        } 

读书人网 >C#

热点推荐