按字母排序列表,但忽略特殊字符
本文关键字:特殊字符 列表 排序 | 更新日期: 2023-09-27 18:07:44
我的问题:我有一个列表,我想按sortname排序。这很有效。但是我有以特殊字符开头的排序名。我怎样做才能使符号不被观察到?
带有符号的sortname示例:(可选)Commerce Bank
我sortfunction:
cmembers.Sort(delegate (ChamberMembers x, ChamberMembers y)
{
if (x.companysortName == null && y.companysortName == null) return 0;
else if (x.companysortName == null) return -1;
else if (y.companysortName == null) return 1;
else return x.companysortName.CompareTo(y.companysortName);
});
符号不能被删除!
使用正则表达式和LINQ排序。您只需要两行代码
Regex reg = new Regex(@"[^a-zA-Z]");
var result = input.OrderBy(x => reg.Replace(x, string.Empty)).ToArray();
完整的代码示例
var input = new List<string>();
input.Add("(c");
input.Add("*b");
input.Add("_a");
Regex reg = new Regex(@"[^a-zA-Z]");
var result = input.OrderBy(x => reg.Replace(x, string.Empty)).ToArray();
在比较之前先清理一下。
cmembers.Sort(delegate (ChamberMembers x, ChamberMembers y)
{
if (x.companysortName == null && y.companysortName == null) return 0;
else if (x.companysortName == null) return -1;
else if (y.companysortName == null) return 1;
else return FilterSpecialChars(x.companysortName).CompareTo(FilterSpecialChars(y.companysortName));
});
public static string FilterSpecialChars(string str)
{
return ...;
}
如果我理解你的问题,这是一个例子:
static void Main(string[] args)
{
List<ChamberMembers> lst = new List<ChamberMembers>();
lst.Add(new ChamberMembers
{
companysortName = "b"
});
lst.Add(new ChamberMembers
{
companysortName = "z"
});
lst.Add(new ChamberMembers
{
companysortName = "e"
});
lst.Add(new ChamberMembers
{
companysortName = "a"
});
Console.WriteLine("'nBefore sort:");
foreach (ChamberMembers ChamberMember in lst)
{
Console.WriteLine(ChamberMember.companysortName);
}
lst.Sort();
Console.WriteLine("'nAfter sort:");
foreach (ChamberMembers ChamberMember in lst)
{
Console.WriteLine(ChamberMember.companysortName);
}
Console.ReadLine();
}
}
public class ChamberMembers : IComparable<ChamberMembers>
{
public string companysortName { get; set; }
public int CompareTo(ChamberMembers Chamber)
{
if (Chamber == null)
return 1;
else
return string.Compare(this.companysortName, Chamber.companysortName, CultureInfo.InvariantCulture, CompareOptions.IgnoreSymbols);
}
}