国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

字符串按首字母分組并ToDictionary的實現(xiàn)

2019-11-17 03:09:15
字體:
供稿:網(wǎng)友

字符串按首字母分組并ToDictionary的實現(xiàn)

  這是攜程(深圳).net開發(fā)筆試的一道題目,要求實現(xiàn)字符串按首字母分組并ToDictionary輸出,當時沒有做出來,后面研究了一下,現(xiàn)在將這道題的幾種實現(xiàn)方式記錄下來。

首先初始化數(shù)據(jù)源,是一個List<string>對象。如下代碼。

//數(shù)據(jù)源            List<string> list = new List<string>             {                "Beijing", "Shanghai", "Tianjin", "Chongqing", "Harbin", "Dalian", "Qingdao", "Xi'an",                   "Dunhuang", "Nanjing", "Wuxi", "Suzhou", "Yangzhou", "Zhenjiang", "Hangzhou", "Xitang",                   "Zhoushan", "Chun'an", "Qiandaohuzhen", "Shaoxing", "Huangshan", "Jiujiang", "Xiamen",                  "Wuyi Shan", "Zhangjiajie", "Chengdu", "Shenzhen", "Zhuhai", "Guangzhou", "Guilin",                   "Kunming", "Xishuangbanna", "Dali", "Lijiang", "Guiyang", "Urumqi", "Turpan", "Lhasa"            };

第一種分組方法,使用正則表達式,代碼如下。

        /// <summary>        /// 使用正則表達式匹配        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        PRivate static string GetGroupNameByRegex(char str)        {            string sInput = str.ToString();            if (Regex.IsMatch(sInput, "[a-gA-G]", RegexOptions.IgnoreCase))            {                return "A-G";            }            if (Regex.IsMatch(sInput, "[h-nH-N]", RegexOptions.IgnoreCase))            {                return "H-N";            }            return "O-Z";        }

第二種方法,直接比較兩個char,代碼如下。

        /// <summary>        /// 方法二:使用字符的ASCII碼大小匹配        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        private static string GetGroupNameByCharASCII(char str)        {            if ((str >= 'a' && str <= 'g') || (str >= 'A' && str <= 'G')) //char可以隱式地轉(zhuǎn)換為int            {                return "A-G";            }            if ((str >= 'h' && str <= 'n') || (str >= 'H' && str <= 'N'))            {                return "H-N";            }            return "O-Z";        }

注意,兩個char之所以能直接比較大小,實際上char先被轉(zhuǎn)換成了int,也就是對應的ASCII碼,然后才進行比較大小的。

第三種方法,實際上跟第二種方法相同,只不過在方法二的基礎上進行了優(yōu)化,代碼如下。

        /// <summary>        /// 方法二的升級版        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        private static string GetGroupNameByCharASCII1(char str)        {            char newChar = Char.ToLower(str);            //if (newChar >= 'o')            //{            //    return "O-Z";            //}            //if (newChar>='h')            //{            //    return "H-N";            //}            //return "A-G";            return newChar >= 'o' ? "O-Z" : newChar >= 'h' ? "H-N" : "A-G";        }

需要注意的是,方法三的寫法,多個if...else...語句可以使用三元操作符來化簡,使代碼更優(yōu)雅。

輸出結果,代碼如下。

var query = list.GroupBy(p =>{    return GetGroupNameByRegex(p[0]);}).ToDictionary(p => p.Key, p => p);foreach (var item in query){    Console.WriteLine("{0}", item.Key);//IGrouping<TKey,TValue>    foreach (var subItem in item.Value)    {        Console.WriteLine("  {0}", subItem);    }}Console.ReadKey();

輸出結果截圖如下。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 马山县| 乌兰察布市| 鹤岗市| 大兴区| 濉溪县| 唐河县| 隆林| 凤冈县| 长葛市| 泸溪县| 桑日县| 梁河县| 梅河口市| 南投县| 普宁市| 石狮市| 丰镇市| 茂名市| 吉隆县| 荥阳市| 连城县| 黄浦区| 满洲里市| 镇平县| 泗水县| 聂拉木县| 莱芜市| 德格县| 浦东新区| 平度市| 永丰县| 综艺| 盐津县| 天镇县| 尼勒克县| 砚山县| 龙陵县| 青阳县| 华坪县| 沂源县| 炉霍县|