Sorting of list contained strings having alphabetic/numeric

前端 未结 2 754
长情又很酷
长情又很酷 2020-12-12 04:46

I want to make sort list of strings which contains strings of alphabetically, mixture of alphabetic and numeric and numeric only.I have requirement from my client to sort li

2条回答
  •  悲&欢浪女
    2020-12-12 05:34

    Try this:

    var text = "111,111A,222,411G,300,411Z,G411,AG500,A111,AZ600,ABQ,ZZZ,AAN";
    var list = text.Split(',').ToList();
    var result = list.OrderBy(i => i, new StringCompare());
    foreach (var item in result)
    {
        Console.WriteLine(item);
    }
    

    StringCompare class:

    class StringCompare : IComparer
    {
        string[] exps = new[] { @"^\d+$", @"^\d+[a-zA-Z]+$", @"^[a-zA-Z]\d+$", @"^[a-zA-Z]+\d+$" };
        public int Compare(string x, string y)
        {
            for (int i = 0; i < exps.Length; i++)
            {
                var isNumberx = Regex.IsMatch(x, exps[i]);
                var isNumbery = Regex.IsMatch(y, exps[i]);
    
                if (isNumberx && isNumbery)
                    return string.Compare(x, y);
                else if (isNumberx)
                    return -1;
                else if (isNumbery)
                    return 1;
                //return string.Compare(x, y);
            }
            return string.Compare(x, y);
        }
    }
    

    You will get:

    111
    222
    300
    111A
    411G
    411Z
    A111
    G411
    AG500
    AZ600
    AAN
    ABQ
    ZZZ
    

提交回复
热议问题