2011-01-24 70 views
14

我有一个List这样的:排序字符串列表数字(1,2,...,9,10代替1,10,2)

var l = new List<string> {"bla 1.txt","bla 2.txt","bla 10.txt","bla 3.txt"}; 

如果我叫l.Sort( ),该列表按照1,10,2,3的顺序排序,这从纯粹的字符串的角度来看是有意义的,但是从用户透视图中吸取。

因为我不想/不能强迫我的用户命名它们01,02,03 ......我想知道是否有内置方法或简单的算法来正确检测和排序数字,所以我有1,2,3,10?由于数字长度只有1或2个字符(即不超过99个),我可以做一个正则表达式,临时将所有1位数字加上0并排序,但在重新发明轮子之前,我想知道是否已经存在?

.NET 3.5SP1如果该事项,而不是4.0

+1

看起来相关,看看http://stackoverflow.com/questions/1022203/sorting-strings-containing-numbers-in-a-user-friendly-way – VoodooChild 2011-01-24 23:07:46

+0

重复http://stackoverflow.com/ q/248603/24874 – 2016-12-15 14:46:07

回答

0

你可以实现你自己的IComparer,它可以在输入(“bla 1.txt”)上使用一个正则表达式,将它转换为一个int,并对该解析值进行比较。

10

为什么不写一些能从字符串中提取数字的东西?

// Note: This could very well be a bad implementation. I'm not too great with Regex. 
static int ExtractNumber(string text) 
{ 
    Match match = Regex.Match(text, @"(\d+)"); 
    if (match == null) 
    { 
     return 0; 
    } 

    int value; 
    if (!int.TryParse(match.Value, out value)) 
    { 
     return 0; 
    } 

    return value; 
} 

然后,你可以使用排序列表:

list.Sort((x, y) => ExtractNumber(x).CompareTo(ExtractNumber(y))); 

这令我非常低效,但是它至少应该功能