2016-07-30 88 views
1

是否有簡單的方法來基於字符串的第4個字符對列表進行排序?我有一個代碼在他們面前的國家名單; 「我們美國」是我的名單中的一個字符串,我想在全名之前忽​​略代碼(「我們」)。按字符串的第n個字符排序列表c#

回答

3
list.Sort((x, y) => x.Substring(3).CompareTo(y.Substring(3))); 
0

這應該做到這一點 - List<string>是你原來的列表變量

[List<string>].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); 

注意ToLower,所以你不比較大寫小寫字母(如果你有兩個)

1

不像其他答案,這種執行方式將不會創建不必要的子字符串。相反,它利用現有的string.Compare(strA, indexA, strB, indexB, length)過載來接受字符串偏移量進行比較。

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

還有其他有用string.Compare過載,也接受偏移值,你可以用它來調整的比較行爲。 (例如:忽略大小寫等)

+0

+ 1用於使用現有的比較操作而不操縱字符串文字。我要添加的是一個長度檢查,以確保s1和s2的長度都至少爲4個字符(以避免潛在的ArgumentOutOfRangeException) –

+1

@PhilGref如果字符串短於3個字符應該怎麼辦?它應該被忽略,還是導致引發自定義異常,或設置警告標誌?不知道它,保持默認的錯誤處理可能是一個更好的選擇。 – AlexD