排序字符串数字 [英] sort string-numbers

查看:44
本文介绍了排序字符串数字的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

可能的重复:
C#中的自然排序

我有一个列表,里面有很多数字.但由于一些额外的字母,它们被保存为字符串.

I have a list with a lot of numbers in it. But they are saved as strings because of some additional letters.

我的列表看起来像这样:

My list looks something like this:

1
10
11
11a
11b
12
2
20
21a
21c
A1
A2
...

但它应该是这样的

1
2
10
11a
11b
...
A1
A2
...

如何对我的列表进行排序以获得此结果?

How do i sort my list to get this result?

推荐答案

根据之前的评论,我还将实现一个自定义的 IComparer 类.据我所知,项目的结构要么是一个数字,要么是一个数字后跟一个字母的组合.如果是这种情况,以下 IComparer 实现应该可以工作.

Going by the previous comments, I would also implement a custom IComparer<T> class. From what I can gather, the structure of the items is either a number, of a combination of a number followed by a letter(s). If this is the case, the following IComparer<T> implementation should work.

public class CustomComparer : IComparer<string>
{
    public int Compare(string x, string y)
    {
        var regex = new Regex("^(d+)");

        // run the regex on both strings
        var xRegexResult = regex.Match(x);
        var yRegexResult = regex.Match(y);

        // check if they are both numbers
        if (xRegexResult.Success && yRegexResult.Success)
        {
            return int.Parse(xRegexResult.Groups[1].Value).CompareTo(int.Parse(yRegexResult.Groups[1].Value));
        }

        // otherwise return as string comparison
        return x.CompareTo(y);
    }
}

有了这个IComparer,你就可以对你的string列表进行排序

With this IComparer<T>, you'll be able to sort your list of string by doing

var myComparer = new CustomComparer();
myListOfStrings.Sort(myComparer);

已使用以下项目进行测试:

This has been tested with the following items:

2, 1, 4d, 4e, 4c, 4a, 4b, A1, 20, B2, A2, a3, 5, 6, 4f, 1a

并给出结果:

1, 1a, 2, 20, 4a, 4b, 4c, 4d, 4e, 4f, 5, 6, A1, A2, a3, B2

这篇关于排序字符串数字的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆