我们有一个标题列表,其中一些以数字开头(例如5种制作小部件的方法)。我们想把它当作“五种方式......”而不改变标题。我们知道有些电影场所会这样做,但我无法在网上找到有关如何操作的信息。有什么想法吗?
答案 0 :(得分:3)
存储原始标题和拼写标题。
select OriginalTitle from Movies order by spelledTitle
答案 1 :(得分:1)
在计算机科学中,在学习编程时,有时会有一个将数字转换为文本的赋值。像:
526 = Fivehundredtwentysix
这可能是你在这种情况下需要的东西。
这是一项微不足道的任务,但这是一个很好的教训。
答案 2 :(得分:1)
创建自定义比较器,请参阅http://support.microsoft.com/kb/320727。
基本上你想要做的是测试第一个字符是否为数字。如果它不仅仅是恢复到标准字符串比较,如果是,那么你可以做一些额外的处理来获得该数字的文本版本。
一旦你有这个,大多数排序算法将允许你通过比较器。
答案 3 :(得分:0)
扩展其他人的建议:
private static string[] digitnames = new string[] { "oh", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; private static string ReplaceDigits(string s) { string convertedSoFar = ""; //could use a StringBuilder if performance is an issue. for (int charPos = 0; charPos < s.Length; charPos++) { if (char.IsNumber(s[charPos])) { //Add the digit name matching the digit. convertedSoFar += digitnames[int.Parse(s[charPos].ToString())]; } else { //we've reached the end of the numbers at the front of the string. //Add back the rest of s and quit. convertedSoFar += s.Substring(charPos); break; } } return convertedSoFar; }
这段代码将“101 dalmations”变成“oneohone dalmations”和“12怒气冲冲的男人”变成“愤怒的男人”。可以从Wedge's solution to a slightly different problem构建更完整的解决方案。我没有测试过那个代码,它不是为了处理数字之后的字符串而设计的,但它可能是一个好的开始。
private static int NumberReplacingCompare(string strA, string strB) { return ReplaceDigits(strA).CompareTo(ReplaceDigits(strB)); } private static void OutputSortedStrings() { List strings = new List(File.ReadAllLines(@"D:\Working\MyStrings.txt")); //pull the strings from a file (or wherever they come from strings.Sort(NumberReplacingCompare); //sort, using NumberReplacingCompare as the comparison function foreach (string s in strings) { System.Console.WriteLine(s); } }