我有字典Dictionary<string, Point>
如何排序的字典鍵
關鍵是C1,C3,C2,T1,T4,T2我想對它們進行排序爲C1,C2,C3,T1,T2, T3
我試圖使用
Input.OrderBy(key => key.Key);
進行排序,但它不工作
任何想法如何解決
我有字典Dictionary<string, Point>
如何排序的字典鍵
關鍵是C1,C3,C2,T1,T4,T2我想對它們進行排序爲C1,C2,C3,T1,T2, T3
我試圖使用
Input.OrderBy(key => key.Key);
進行排序,但它不工作
任何想法如何解決
確定檢查這一點,應該工作
var r = new Dictionary<string, Point>();
r.Add("c3", new Point(0, 0));
r.Add("c1", new Point(0, 0));
r.Add("t3", new Point(0, 0));
r.Add("c4", new Point(0, 0));
r.Add("c2", new Point(0, 0));
r.Add("t1", new Point(0, 0));
r.Add("t2", new Point(0, 0));
var l = r.OrderBy(key => key.Key);
var dic = l.ToDictionary((keyItem) => keyItem.Key, (valueItem) => valueItem.Value);
foreach (var item in dic)
{
Console.WriteLine(item.Key);
}
Console.ReadLine();
-1:這不會工作。您只是創建了另一個沒有排序的字典。它可能適用於小型字典,但最終會失敗。 – leppie
我們在聊天時發了脾氣,我知道他想要什麼,所以我幫助他解決了他的問題 – DeveloperX
@DeveloperX - 我的猜測是人們投票不起作用,因爲它沒有回答問題。我們沒有看到聊天,所以人們可能不認爲這是我們看到的問題的有用答案。 –
只是猜測,但它看起來像你正在假設它將排序輸入。 OrderBy方法實際上會返回包含相同值的IOrderedEnumerable的有序實例。如果你想保留的返回值,你可以做以下:
IOrderedEnumerable orderedInput
orderedInput = Input.OrderBy(key=>key.Key)
,將修改集合大多數方法遵循相同的模式。它這樣做是爲了不改變原始收藏實例。這樣可以防止您在無意的情況下意外更改實例。如果您只想使用已排序的實例,則只需將該變量設置爲方法返回,如上所示。
我用
var l = Input.OrderBy(key => key.Key);
,我把它轉換到字典
A我說過:這不會對字典進行排序!它創建一個排序的「視圖」。 –
裝入未分類的對象爲像這樣的SortedDictionary對象:
SortedDictionary<string, string> sortedCustomerData = new SortedDictionary<string,string>(unsortedCustomerData);
其中unsortedCustomerData是相同的泛型類型(字符串,字符串或在您的案例字符串,點)。它會自動按鍵排序新對象
根據msdn:SortedDictionary(IDictionary):初始化SortedDictionary類的新實例,該實例包含從指定的IDictionary複製的元素,並將默認的IComparer實現用於鍵類型。
using System;
using System.Collections.Generic;
using System.Drawing;
namespace ConsoleApplication1 {
class Program {
static void Main(string[] args) {
Dictionary<string,Point> r=new Dictionary<string,Point>();
r.Add("c3",new Point(0,1));
r.Add("c1",new Point(1,2));
r.Add("t3",new Point(2,3));
r.Add("c4",new Point(3,4));
r.Add("c2",new Point(4,5));
r.Add("t1",new Point(5,6));
r.Add("t2",new Point(6,7));
// Create a list of keys
List<string> zlk=new List<string>(r.Keys);
// and then sort it.
zlk.Sort();
List<Point> zlv=new List<Point>();
// Readd with the order.
foreach(var item in zlk) {
zlv.Add(r[item]);
}
r.Clear();
for(int i=0;i<zlk.Count;i++) {
r[zlk[i]]=zlv[i];
}
// test output
foreach(var item in r.Keys) {
Console.WriteLine(item+" "+r[item].X+" "+r[item].Y);
}
Console.ReadKey(true);
}
}
}
以上代碼的輸出如下所示。
c1 1 2
c2 4 5
c3 0 1
c4 3 4
t1 5 6
t2 6 7
t3 2 3
由於Input.OrderBy創建一個按有序順序返回項目的查詢,只需將其分配給同一個字典。
objectDict = objectDict.OrderBy(obj => obj.Key).ToDictionary(obj => obj.Key, obj => obj.Value);
它沒有排序,或者只是不按照您期望的順序? –
不 – AMH
http://stackoverflow.com/questions/289/how-do-you-sort-a-c-sharp-dictionary-by-value 引用排序,這樣它有一些很好的例子。 –