[英]How to sort a SortedDictionary collection by key alphabetically
我有一個SortedDictionary
的集合:
SortedDictionary<string, string> _variableValues = new SortedDictionary<string, string>();
鍵值對看起來像:
ThkPost_Point15 5
ThkPost_Point1 15
ThkPost_Point11 8
ThkPost_Point2 7
ThkPost_Point20 1
ThkPost_Point22 1
現在我想按字母順序對它們進行排序。
我嘗試通過使用來做到這一點
_variableValues.OrderBy(key => key.Key);
但我的問題是,結果是:
ThkPost_Point1 15
ThkPost_Point11 8
ThkPost_Point15 5
ThkPost_Point2 7
ThkPost_Point20 1
ThkPost_Point22 1
但我正在尋找的是一種實現排序結果的解決方案,如:
ThkPost_Point1 15
ThkPost_Point2 7
ThkPost_Point11 8
ThkPost_Point15 5
ThkPost_Point20 1
ThkPost_Point22 1
有沒有辦法使用SortedDictionary
以這種方式對數據進行排序?
編輯:
我試圖實現Babu和metacubed的提示。
因此以下列方式使其受到阻礙
static void Main(string[] args)
{
SortedDictionary<string, string> _varVal = new SortedDictionary<string, string>(StringComparer.OrdinalIgnoreCase);
_varVal.Add("Variable1", "Value1");
_varVal.Add("Variable2", "Value2");
_varVal.Add("Variable3", "Value3");
_varVal.Add("Variable4", "Value4");
_varVal.Add("Variable5", "Value5");
_varVal.Add("Variable10", "Value10");
_varVal.Add("Variable11", "Value11");
_varVal.Add("Variable12", "Value12");
_varVal.Add("Variable13", "Value13");
_varVal.Add("Variable14", "Value14");
_varVal.Add("Variable20", "Value20");
_varVal.Add("Variable22", "Value21");
_varVal.Add("Variable23", "Value22");
_varVal.Add("Variable24", "Value23");
_varVal.Add("Variable25", "Value24");
foreach (KeyValuePair<string, string> kvp in _varVal)
{
Console.WriteLine(kvp.Key,kvp.Value);
Debug.WriteLine(kvp.Key +" "+ kvp.Value);
}
Application.Run();
}
但結果仍然如下:
Variable1 Value1
Variable10 Value10
Variable11 Value11
Variable12 Value12
Variable13 Value13
Variable14 Value14
Variable2 Value2
Variable20 Value20
Variable22 Value21
Variable23 Value22
Variable24 Value23
Variable25 Value24
Variable3 Value3
Variable4 Value4
Variable5 Value5
我錯過了什么嗎?
注意:修改,因為較早的答案沒有正確解決問題。
您正在尋找的是所謂的“自然順序”排序。 與早期的解決方案相比,這樣做要復雜得多。 簡而言之,您必須將字符串鍵拆分為其數字和文本部分,然后按順序對每個部分進行排序。 如果部件類似於數字,則將其排序為數字。 否則,將其排序為字符串。
有關可能的實現,請參閱此博客文章自然排序與Linq OrderBy比較 。 原始來源在這里 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.