سؤال

مدخل:

SHC 111U ، SHB 22x ،، SHA 5555G

الإخراج اللازم:

SHB 22x ، SHC 111U ، SHA 5555G

لا بد لي من الفرز فقط Vehicle no في منطقة وقوف السيارات لا بادئة ورسالة لاحقة

هل كانت مفيدة؟

المحلول

حل مصدر مفتوح بشكل رائع ومتحمس جيدًا في http://dotnetperls.com/alphanumeric-sorting

نصائح أخرى

لا يوجد شيء مدمج للقيام بذلك ، ولكن يمكنك القيام بذلك عن طريق استخراج الأرقام أولاً والفرز بناءً على ذلك. علي سبيل المثال:

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);
    }
}

هذا لم يتم اختباره (وربما لن يتم تجميعه دون تعديل) ، وليس لديه أي خطأ في التحقق ، وربما ليس أسرع طريقة في العالم ، ولكن يجب أن تعطيك فكرة.

إذا كان من الممكن الحصول على لوحة بدون رقم ، فعليك التحقق من ذلك.

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);
    }

}

طريقة جيدة للقيام بذلك هي أن تفعل شيئًا كهذا

اكتب تعبيرًا منتظمًا لمطابقة الجزء الرقمي فقط من الاسم ، ضعه في مجموعة من قيم عدد صحيح مقترن ، وهو الأول هو الرقم الذي سحبته من السلسلة والثاني هو فهرس الرقم في القائمة الأصلية. ثم فرز القائمة الثانية ، ثم أعد ترتيب القائمة الأولى باستخدام الرقم الثاني في مجموعتك.

استخدم طريقة فرز تقبل icomparer اعترض ومررها مجموعتك من أرقام المركبات. ستحتاج إلى تحديد فئة مخصصة تنفذ icomparer. في طريقة مقارنة تلك الفئة ، يمكنك كتابة التعليمات البرمجية لمقارنة رقمين السيارة. ربما يجب عليك استخدام regex لاستخراج الجزء العددي من رقم السيارة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top