タイトルのリストがあり、そのうちのいくつかは数字で始まります (例: ウィジェットを作成する 5 つの方法)。タイトルは変えずに「5つの方法…」として並べ替えたいと思います。一部の映画の場所でこれが行われていることはわかっていますが、オンラインでその方法に関する情報を見つけることができません. 何か案は?
質問する
698 次
4 に答える
3
元のタイトルとスペルアウトされたタイトルの両方を保存します。
select OriginalTitle from Movies order by spelledTitle
参照:整数を文字数に変換する
于 2010-02-20T00:18:40.580 に答える
1
カスタム比較機能を作成するには、http://support.microsoft.com/kb/320727を参照してください。
基本的にやりたいことは、最初の文字が数字かどうかをテストすることです。標準の文字列比較に戻すだけではない場合は、追加の処理を行って数値のテキスト バージョンを取得できます。
このほとんどの並べ替えアルゴリズムを取得すると、比較子を渡すことができます。
于 2010-02-20T00:31:08.853 に答える
1
コンピューターサイエンスでは、プログラミングを学ぶときに、数値をテキストに変換する課題が出されることがあります。お気に入り:
526 = Fivehundredtwentysix
これはおそらく、この場合に必要になるものです。
些細な課題ですが、良い教訓です。
于 2010-02-20T00:18:58.803 に答える
0
他の人の提案を拡張するには:
- これの最も難しい部分はおそらく、数字をその数字を表す英語の文字列に変換するコードです - Sani のプログラミング課題です。要件を満たさない可能性のある単純化された例を含めました。
プライベート静的文字列[] 数字名 = 新しい文字列[] { "ああ"、"1"、"2"、"3"、"4"、"5"、"6"、"7"、"8"、"9"}; プライベート静的文字列 ReplaceDigits(string s) { 文字列 convertSoFar = ""; //パフォーマンスが問題になる場合は、StringBuilder を使用できます。 for (int charPos = 0; charPos < s.Length; charPos++) { if (char.IsNumber(s[charPos])) { //桁に一致する桁名を追加します。 convertSoFar += digitnames[int.Parse(s[charPos].ToString())]; } そうしないと { //文字列の先頭の数字の最後に到達しました。 //残りの s を追加して終了します。 convertSoFar += s.Substring(charPos); 壊す; } } convertSoFar を返します。 }
このコードは、「101 だるま」を「oneoone だるま」に、「12 怒れる男」を「onetwo 怒れる男」に変換します。おそらくウェッジのソリューションからわずかに異なる問題まで、より完全なソリューションを構築できます。私はそのコードをテストしておらず、数字の後の文字列を処理するように設計されていませんが、おそらく良いスタートです。
- 最新の C# (3.0 以降だと思います) では、IComparable または IComparer を明示的に作成するのではなく、Sort にメソッド名を渡すことができます。これは基本的にマイケルのリンクと同じ考え方です。別の関連するオプションは、外部メソッドを必要としない匿名ラムダ式です。個人的には、この方法の方がコードがきれいに読めると思います。
private static int NumberReplaceingCompare(string strA, string strB) { ReplaceDigits(strA).CompareTo(ReplaceDigits(strB)); を返します。 } private static void OutputSortedStrings() { リスト文字列 = new List(File.ReadAllLines(@"D:\Working\MyStrings.txt")); // ファイルから (またはどこからでも) 文字列を取得します 文字列.Sort(NumberReplaceingCompare); //並べ替え、比較関数として NumberReplaceingCompare を使用 foreach (文字列内の文字列 s) { System.Console.WriteLine(s); } }
于 2010-02-20T03:30:54.603 に答える