按字母排序列表,但忽略特殊字符

本文关键字:特殊字符 列表 排序 | 更新日期: 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);
    }
}