我有一份需要订购的清单,比如:
R1-1
R1-11
R2-2
R1-2这需要订购:
R1-1
R1-2
R1-11
R2-2目前,我正在使用C# Regex.Replace方法,并在字符串末尾的单个数字出现之前添加0,如下所示:
Regex.Replace(inString,@"([1-9]$)", @"0$2")我相信有更好的方法来做这件事,但我就是想不出。有谁有一种用正则表达式对字母和数字字符串进行排序的好方法?
下面我使用了Greg的方法来完成这个任务,我只是觉得我应该添加我所使用的代码以保证完整性:
public static List<Rack> GetRacks(Guid aisleGUID)
{
log.Debug("Getting Racks with aisleId " + aisleGUID);
List<Rack> result = dataContext.Racks.Where(
r => r.aisleGUID == aisleGUID).ToList();
return result.OrderBy(r => r.rackName, new NaturalStringComparer()).ToList();
}发布于 2009-03-25 08:39:28
我认为你所追求的是自然排序顺序,就像Windows资源管理器一样?如果是这样的话,我写了一段时间后的博客条目显示如何在几行C#中实现这一点?。
注意:我刚刚检查并使用链接条目中的NaturalStringComparer返回您要查找的顺序和示例字符串。
发布于 2009-03-25 08:48:39
您可以编写自己的比较器,并使用正则表达式来比较"R“和"-”之间的数字,如果第一个数字相等,则后面的数字是"-“。
素描:
public int Compare(string x, string y)
{
int releaseX = ...;
int releaseY = ...;
int revisionX = ...;
int revisionY = ...;
if (releaseX == releaseY)
{
return revisionX - revisionY;
}
else
{
return releaseX - releaseY;
}
}https://stackoverflow.com/questions/680692
复制相似问题