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

时间:2016-09-19 12:02:43

标签: c# sorting

我的问题: 我有一个列表,我想按sortname排序。这非常有效。但是我在开始时有特殊字符的类型名称。我能做什么才能观察到符号?

带符号的sortname示例:(替代)Commerce Bank

我的分类功能:

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);
                });

不得删除符号!

3 个答案:

答案 0 :(得分:2)

使用正则表达式和LINQ进行排序。您只需要两行代码

{{1}}

完整的代码示例

{{1}}

答案 1 :(得分:1)

在比较之前清理它。

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 ...;
}

答案 2 :(得分:1)

如果我理解你的问题,这就是一个例子:

    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);
    }
}