按字母排序列表,但忽略特殊字符
我的问题: 我有一个列表,我想按sortname排序。这很好。但是我在开始的时候有特殊字符的排序。我该怎么做才能看到符号?用符号sortname的按字母排序列表,但忽略特殊字符
实例:(二选一)商业银行
我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();
它并未被删除。你可以试试我的代码 –
我喜欢这个想法。但我有一个对象不是一个刺痛。你有什么想法来解决这个对象?我的意思是我在这个对象中有几个字符串,我将通过这个排序名排序对象 – Andreas
你能给我你的对象的结构吗? –
只是比较前清理它。
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);
}
}
尽管您正在执行'IComparable',但您的示例缺少OP正在努力的符号/数字。 – Filburt
你是对的,我改变了代码,所以它可以用符号和数字挣扎 –
哪些字符被允许在年初A-Z或数字呢? –
使用[CompareOptions](https://msdn.microsoft.com/en-us/library/system.globalization.compareoptions(v = vs.110).aspx)(在你的情况下'IgnoreSymbols')应该做的伎俩。 – Filburt
只以A-Z或a-z无数字和特殊字符开头 – Andreas