Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按字母顺序对字母数字列表进行排序_C#_Asp.net_Arrays_List_Sorting - Fatal编程技术网

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实现: