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

问题描述:

我的问题: 我有一个列表,我想按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); 
       }); 

的符号不能删除!

+0

哪些字符被允许在年初A-Z或数字呢? –

+1

使用[CompareOptions](https://msdn.microsoft.com/en-us/library/system.globalization.compareoptions(v = vs.110).aspx)(在你的情况下'IgnoreSymbols')应该做的伎俩。 – Filburt

+0

只以A-Z或a-z无数字和特殊字符开头 – Andreas

使用正则表达式和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(); 
+0

它并未被删除。你可以试试我的代码 –

+0

我喜欢这个想法。但我有一个对象不是一个刺痛。你有什么想法来解决这个对象?我的意思是我在这个对象中有几个字符串,我将通过这个排序名排序对象 – Andreas

+0

你能给我你的对象的结构吗? –

只是比较前清理它。

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

尽管您正在执行'IComparable',但您的示例缺少OP正在努力的符号/数字。 – Filburt

+0

你是对的,我改变了代码,所以它可以用符号和数字挣扎 –