C# 如何按字母顺序对字母数字列表进行排序
我试图按国家名称对字符串列表进行排序,每个字符串元素前面包含四位数字。但是,我实际上是按每个字符串前面的数字排序,而不是按国家名称排序。有谁能帮我在排序时忽略字符串中的数字吗。谢谢C# 如何按字母顺序对字母数字列表进行排序,c#,asp.net,arrays,list,sorting,C#,Asp.net,Arrays,List,Sorting,我试图按国家名称对字符串列表进行排序,每个字符串元素前面包含四位数字。但是,我实际上是按每个字符串前面的数字排序,而不是按国家名称排序。有谁能帮我在排序时忽略字符串中的数字吗。谢谢 List<string> lst = new List<string>(); lst.Add("0003 India"); lst.Add("0005 America"); lst.Add("0004 Japan"); lst.Add("0001 Sweden"); lst.Add("0002
List<string> lst = new List<string>();
lst.Add("0003 India");
lst.Add("0005 America");
lst.Add("0004 Japan");
lst.Add("0001 Sweden");
lst.Add("0002 Germany");
lst.Sort();
lstSearchResult.DataSource = lst;
lstSearchResult.DataBind();
我实际上想要输出
0005 America
0002 Germany
0003 India
0004 Japan
0001 Sweden
Sort不起作用的原因是它使用了字符串的默认比较-这需要整个字符串来进行排序。您要做的是仅按空格后的字符串部分进行排序。为此:
您可以对拆分的字符串的第二部分使用Linq的.OrderBy方法:
List<string> lst = new List<string>();
lst.Add("0003 India");
lst.Add("0005 America");
lst.Add("0004 Japan");
lst.Add("0001 Sweden");
lst.Add("0002 Germany");
lst = lst.OrderBy(item => item.Split(' ').ElementAtOrDefault(1)).ToList();
// Or if always by the string from position 5 onward then:
lst = lst.OrderBy(p => p.Substring(5)).ToList();
lstSearchResult.DataSource = lst;
lstSearchResult.DataBind();
Sort不起作用的原因是它使用了字符串的默认比较-这需要整个字符串来进行排序。您要做的是仅按空格后的字符串部分进行排序。为此:
您可以对拆分的字符串的第二部分使用Linq的.OrderBy方法:
List<string> lst = new List<string>();
lst.Add("0003 India");
lst.Add("0005 America");
lst.Add("0004 Japan");
lst.Add("0001 Sweden");
lst.Add("0002 Germany");
lst = lst.OrderBy(item => item.Split(' ').ElementAtOrDefault(1)).ToList();
// Or if always by the string from position 5 onward then:
lst = lst.OrderBy(p => p.Substring(5)).ToList();
lstSearchResult.DataSource = lst;
lstSearchResult.DataBind();
您可以在OrderBy中使用Split并指定要排序的零件
lst.OrderBy(x=>x.Split(' ')[1]);
您可以在OrderBy中使用Split并指定要排序的零件
lst.OrderBy(x=>x.Split(' ')[1]);
如果您确定始终有四位数字后跟空白,则可以使用此重载:
lst.Sort((s1, s2) => String.Compare(s1.Substring(5), s2.Substring(5), StringComparison.Ordinal));
lstSearchResult.DataSource = lst;
lstSearchResult.DataBind();
如果您确定始终有四位数字后跟空白,则可以使用此重载:
lst.Sort((s1, s2) => String.Compare(s1.Substring(5), s2.Substring(5), StringComparison.Ordinal));
lstSearchResult.DataSource = lst;
lstSearchResult.DataBind();
如果数字000始终为4。你可以这样做:
List<string> lst = new List<string>();
lst.Add("0003 India");
lst.Add("0005 America");
lst.Add("0004 Japan");
lst.Add("0001 Sweden");
lst.Add("0002 Germany");
lst = lst.OrderBy(p => p.Substring(5)).ToList();
lstSearchResult.DataSource = lst;
lstSearchResult.DataBind();
如果数字000始终为4。你可以这样做:
List<string> lst = new List<string>();
lst.Add("0003 India");
lst.Add("0005 America");
lst.Add("0004 Japan");
lst.Add("0001 Sweden");
lst.Add("0002 Germany");
lst = lst.OrderBy(p => p.Substring(5)).ToList();
lstSearchResult.DataSource = lst;
lstSearchResult.DataBind();
作为已经建议的Linq查询和Lambda表达式的替代方案,您可以编写自己的IComparer实现:
作为已经建议的Linq查询和Lambda表达式的替代方案,您可以编写自己的IComparer实现: