这是携程(深圳).net开发笔试的一道题目,要求实现字符串按首字母分组并ToDictionary输出,当时没有做出来,后面研究了一下,现在将这道题的几种实现方式记录下来。
首先初始化数据源,是一个List<string>对象。如下代码。
//数据源 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可以隐式地转换为int { return "A-G"; } if ((str >= 'h' && str <= 'n') || (str >= 'H' && str <= 'N')) { return "H-N"; } return "O-Z"; }
注意,两个char之所以能直接比较大小,实际上char先被转换成了int,也就是对应的ASCII码,然后才进行比较大小的。
第三种方法,实际上跟第二种方法相同,只不过在方法二的基础上进行了优化,代码如下。
/// <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...语句可以使用三元caozuofu.html" target="_blank">操作符来化简,使代码更优雅。
输出结果,代码如下。
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();
输出结果截图如下。
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" alt="" />