C# 按字符串c的第n个字符对列表排序#

C# 按字符串c的第n个字符对列表排序#,c#,C#,有没有一种简单的方法可以根据字符串的第四个字符对列表进行排序?我有一份前面有代码的国家列表;“美国”是我列表中的一个字符串,我想忽略国家全名前的代码(“美国”) 应该这样做-List是您的原始列表变量 list.Sort((x, y) => x.Substring(3).CompareTo(y.Substring(3))); [List<string>].OrderBy(s => s.Substring(3)).ToList(); [List].OrderBy(s=>

有没有一种简单的方法可以根据字符串的第四个字符对列表进行排序?我有一份前面有代码的国家列表;“美国”是我列表中的一个字符串,我想忽略国家全名前的代码(“美国”)

应该这样做-
List
是您的原始列表变量

list.Sort((x, y) => x.Substring(3).CompareTo(y.Substring(3)));
[List<string>].OrderBy(s => s.Substring(3)).ToList();
[List].OrderBy(s=>s.Substring(3)).ToList();
这很有效

var l = new List<string>(){"us unites states","uk united kingdom","ca canada"};
foreach (var s in l.OrderBy(s => s.ToLower().Substring(3)).ToList())
    Console.WriteLine(s);
var l=new List(){“美国”、“英国”、“加拿大”};
foreach(l.OrderBy中的变量s(s=>s.ToLower().Substring(3)).ToList())
控制台。写入线(s);

注意
ToLower
,因此您不需要比较大写和小写字母(如果两者都有)

这应该可以做到-
List
是您的原始列表变量

[List<string>].OrderBy(s => s.Substring(3)).ToList();
[List].OrderBy(s=>s.Substring(3)).ToList();
这很有效

var l = new List<string>(){"us unites states","uk united kingdom","ca canada"};
foreach (var s in l.OrderBy(s => s.ToLower().Substring(3)).ToList())
    Console.WriteLine(s);
var l=new List(){“美国”、“英国”、“加拿大”};
foreach(l.OrderBy中的变量s(s=>s.ToLower().Substring(3)).ToList())
控制台。写入线(s);

注意
ToLower
,因此您不会比较大写字母和小写字母(如果两者都有)

与其他答案不同,这种执行排序的方式不会创建不必要的子字符串。相反,它利用了接受字符串偏移量进行比较的现有重载

list.Sort((s1, s2) => string.Compare(s1, 3, s2, 3, int.MaxValue));

还有其他有用的
string.Compare
重载,它们也接受偏移量值,可用于调整比较行为。(例如:忽略大小写等)

与其他答案不同,这种执行排序的方式不会创建不必要的子字符串。相反,它利用了接受字符串偏移量进行比较的现有重载

list.Sort((s1, s2) => string.Compare(s1, 3, s2, 3, int.MaxValue));

还有其他有用的
string.Compare
重载,它们也接受偏移量值,可用于调整比较行为。(例如:忽略大小写等)

+1用于使用现有比较操作而不操纵字符串文本。我要添加的只是长度检查,以确保
s1
s2
都至少有4个字符长(以避免潜在的
ArgumentOutOfRangeException
)@PhilGref,如果字符串短于3个字符,该怎么办?是否应该忽略它,或导致引发自定义异常,或设置警告标志?在不知道的情况下,保留默认错误处理可能是一个更好的选择。+1用于在不操纵字符串文本的情况下使用现有的比较操作。我要添加的只是长度检查,以确保
s1
s2
都至少有4个字符长(以避免潜在的
ArgumentOutOfRangeException
)@PhilGref,如果字符串短于3个字符,该怎么办?是否应该忽略它,或导致引发自定义异常,或设置警告标志?在不知情的情况下,保留默认错误处理可能是一个更好的选择。