我有一个数组的字母数字字符串,在字符串末尾也包含一些字符。问题是我只能排序到最后一个字符之前。 这是我的数组
string[] ar = new string[] { "DV00154A", "DV00144A", "DV00111B", "DV00100A", "DV00199B", "DV00001A" };
我尝试了一些方法,但是排序数组跳过了最后一个字符的排序。这是我尝试过的方法之一。
public static string ArraySort(string input)
{
return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10,'0'));
}
public static void Main(string[] args)
{
string[] ar = new string[] { "DV00154A", "DV00144A", "DV00111B", "DV00100A",
"DV00199B", "DV00001A" };
var result = ar.OrderBy(x => ArraySort(x));
Console.WriteLine(string.Join(",",result.ToArray()));
}
返回以下输出
DV00001A,DV00100A,DV00111B,DV00144A,DV00154A,DV00199B
但是我需要的输出应该是这样
DV00001A,DV00100A,DV00144A,DV00154A,DV00111B,DV00199B
答案 0 :(得分:0)
该解决方案如何?
public static string ArraySort(string input)
{
return $"{input.Substring(0, 2)}{input.Substring(7, 1)}{input.Substring(2, 5)}";
}
public static void Main(string[] args)
{
string[] ar = new string[] { "DV00154A", "DV00144A", "DV00111B", "DV00100A", "DV00199B", "DV00001A" };
Array.Sort(ar, (a, b) => StringComparer.OrdinalIgnoreCase.Compare(ArraySort(a), ArraySort(b)));
Console.WriteLine(string.Join(",", ar));
Console.ReadKey();
}
ArraySort
方法以可排序的格式重新排列值:DV00154A
-> DVA00154
。该值由Array.Sort
比较器方法使用。
ar
数组是就地排序的唯一缺点...
编辑:
我找到了一个更好的解决方案:只需将ArraySort
方法与您的Main
方法一起使用。应该工作正常。 :)而且不会影响您的ar
数组。
编辑2:
仅修复了我的ArraySort
方法中的一个小错误。 (抱歉)
修改3:
如果您可以忽略DV
前缀,则可以将ArraySort
方法更改为此:
public static string ArraySort(string input)
{
return $"{input.Substring(7, 1)}{input.Substring(2, 5)}";
}
逻辑不太复杂,结果值更短。它应该具有(边际)更好的性能。