6

入力:

SHC 111U、SHB 22x、SHA 5555G

必要な出力:

SHB 22X、SHC 111U、SHA 5555G

Vehicle no接頭辞と接尾辞ではなく、駐車場でのみソートする必要があります

4

5 に答える 5

5

http://dotnetperls.com/alphanumeric-sortingの素晴らしい、最適化されたオープン ソース ソリューション

于 2010-04-12T03:24:43.810 に答える
4

これを行うための組み込み機能はありませんが、最初に数値を抽出し、それに基づいてソートすることで実行できます。例えば:

class VehicleNumberComparer : IComparer<string>
{
    public int Compare(string lhs, string rhs)
    {
        var numExtract = new Regex("[0-9]+");
        int lhsNumber = int.Parse(numExtract.Match(lhs).Value);
        int rhsNumber = int.Parse(numExtract.Match(rhs).Value);
        return lhsNumber.CompareTo(rhsNumber);
    }
}

これはテストされておらず (おそらく変更なしではコンパイルすらできないでしょう)、エラー チェックも行われておらず、おそらく世界最速の方法ではありませんが、アイデアは得られるはずです。

于 2010-04-12T02:55:38.103 に答える
1

番号のないプレートがある可能性がある場合は、それを確認する必要があります。

static int SortPlate(string plate)
{
    int plateNumber;
    Regex regex = new Regex(@"\d+");
    Int32.TryParse(regex.Match(plate).Value, out plateNumber);

    return plateNumber;
}

static void Main(string[] args)
{
    IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G", "HOT STUFF"};

    var sortedList = from z in data
                     orderby SortPlate(z)
                     select z;

    foreach (string plate in sortedList)
    {
        Console.WriteLine(plate);
    }

}

それが絶対に不可能で、数字のないプレートが存在する前に世界の終わりが来る場合は、次の短縮形が機能します。

static void Main(string[] args)
{
    IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G"};

    Regex regex = new Regex(@"\d+");
    var sortedList = from z in data
                     orderby Int32.Parse(regex.Match(z).Value)
                     select z;

    foreach (string plate in sortedList)
    {
        Console.WriteLine(plate);
    }

}
于 2010-04-12T03:19:09.120 に答える
0

これを行う良い方法は、このようなことをすることです

名前の数値部分だけに一致する正規表現を記述し、ペアの整数値のコレクションに入れます。最初の値は文字列から取得した数値で、2 番目の値は元のリストの数値のインデックスです。次に、2 番目のリストを並べ替え、コレクション内の 2 番目の番号を使用して最初のリストを並べ替えます。

于 2010-04-12T02:57:38.023 に答える
0

IComparerオブジェクトを受け入れる Sort メソッドを使用して、車両番号のコレクションを渡します。IComparer を実装するカスタム クラスを定義する必要があります。そのクラスの Compare メソッドで、2 つの車両番号を比較するコードを記述できます。車両番号の数値部分を抽出するには、おそらく正規表現を使用する必要があります。

于 2010-04-12T03:02:21.863 に答える