C#数字字符串排序orderby的问题解决

csharp C#数字字符串排序orderby的问题解决

   一般情况下 您使用 

strs.OrderBy(n=>n) 得出的结论是 1, 11,111,2,22,222
想要得出 1,2,11,22,111,222 咋办?
源码送上

复制代码

static void Main()
{
    SemiNumericComparer comp = new SemiNumericComparer();

    List<string> strs = new List<string>(){"11", "12", "1:"};
    foreach(string str in strs.OrderBy(n => n, comp))
        Console.writeLine(str);
}

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

public class SemiNumericComparer : IComparer<string>

        {

            public int Compare(string s1, string s2)

            {

                if (IsNumeric(s1) && IsNumeric(s2))

                {

                    if (Convert.ToInt32(s1) > Convert.ToInt32(s2)) return 1;

                    if (Convert.ToInt32(s1) < Convert.ToInt32(s2)) return -1;

                    if (Convert.ToInt32(s1) == Convert.ToInt32(s2)) return 0;

                }

                if (IsNumeric(s1) && !IsNumeric(s2))

                    return -1;

                if (!IsNumeric(s1) && IsNumeric(s2))

                    return 1;

                return string.Compare(s1, s2, true);

            }

            public static bool IsNumeric(object value)

            {

                try

                {

                    int i = Convert.ToInt32(value.ToString());

                    return true;

                }

                catch (FormatException)

                {

                    return false;

                }

            }

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值