C# 按字母顺序对字符串数组排序,忽略数字和符号

C# 按字母顺序对字符串数组排序,忽略数字和符号,c#,string,sorting,C#,String,Sorting,我正在尝试对只包含字母的数字的字符串数组进行排序,例如: Original数组={“09banana”、“Pears2”、“Mangoes39Bad”、“100Apples”、“Mangoes38Good”} 应成为: Sorted array={“100Apples”、“09banana”、“Mangoes39Bad”、“Mangoes38Good”、“Pears2”} 但是,当我尝试使用Array.sort(original)时,结果如下: {“09panana”、“100Apples”、“

我正在尝试对只包含字母的数字的字符串数组进行排序,例如:

Original数组={“09banana”、“Pears2”、“Mangoes39Bad”、“100Apples”、“Mangoes38Good”}

应成为:

Sorted array={“100Apples”、“09banana”、“Mangoes39Bad”、“Mangoes38Good”、“Pears2”}

但是,当我尝试使用
Array.sort(original)
时,结果如下:

{“09panana”、“100Apples”、“mangoes38 good”、“mangoes39 bad”、“Pears2”}

是否存在会使其忽略数字的
Array.sort
重载

谢谢

在比较字符串之前使用重载和跳过数字

var array = new[] {
    "09Bananas", "Pears2", "Mangoes39Bad", "100Apples", "Mangoes38Good"
};
Array.Sort(array, (a,b) => {
    a = new string(a.Where(char.IsLetter).ToArray());
    b = new string(b.Where(char.IsLetter).ToArray());
    return a.CompareTo(b);
});
Console.WriteLine(string.Join(", ", array));

LINQ表达式
a.Where(char.isleter).ToArray()
将字符串转换为单个字母的数组。

您可以编写一个方法,返回不带数字的字符串,并将其用于:

使用它:

var original = new[] { "09Bananas", "Pears2", "Mangoes39Bad", "100Apples", "Mangoes38Good" };
var ordered = original.OrderBy(s => TextOnly(s));
// if you need it as: String[] orderedArray = ordered.ToArray();
要订购原始阵列,您可以使用@dasblinkenlight提到的:

Array.Sort<String>(original, (s1, s2) => TextOnly(s1).CompareTo(TextOnly(s2)));
Array.Sort(原始,(s1,s2)=>TextOnly(s1)。CompareTo(TextOnly(s2));
Array.Sort<String>(original, (s1, s2) => TextOnly(s1).CompareTo(TextOnly(s2)));