2011-03-15 39 views
0

我已经看过遍及互联网,试图找到如何解决以下问题的示例。如何在取消排序中按“值”排序列表并按“键”排序重复项?

如何在取消排序中按“值”排序列表并按“键”排序重复项? 然后以下列格式打印结果。

我已经附上我的代码,它的工作原理,但是当您使用SortedList()时发生重复值时会发生问题。我非常感谢,如果有人可以请修改此代码或以另一种方式准确地告诉我如何做到这一点,那就是快速而有效。

非常感谢您提前。

BEFORE排序:

价值的,关键的排序

sL.Add(1269.63,"white"); 
sL.Add(1270.36,"orange"); 
sL.Add(1272.06,"yellow"); 
sL.Add(1271.50,"cyan"); 
sL.Add(1272.06,"black"); 
sL.Add(1274.12,"dodBlue"); 
sL.Add(1276.02,"blue"); 
sL.Add(1273.21,"green"); 
sL.Add(1275.52,"red"); 

AFTER:

价值的,关键的

sL.Add(1276.02,"blue"); 
sL.Add(1275.52,"red"); 
sL.Add(1274.12,"dodBlue"); 
sL.Add(1273.21,"green"); 
sL.Add(1272.06,"black"); 
sL.Add(1272.06,"yellow"); 
sL.Add(1271.50,"cyan"); 
sL.Add(1270.36,"orange"); 
sL.Add(1269.63,"white"); 

CODE:

SortedList sL = new SortedList(); 

sL.Add(SMA(8)[0], "white"); 
sL.Add(SMA(10)[0], "orange"); 
sL.Add(SMA(13)[0], "yellow"); 
sL.Add(SMA(20)[0], "cyan"); 
sL.Add(SMA(30)[0], "black"); 
sL.Add(SMA(40)[0], "dodBlue"); 
sL.Add(SMA(50)[0], "blue"); 
sL.Add(SMA(100)[0], "green"); 
sL.Add(SMA(200)[0], "red"); 

Print(" " + " " + sL.GetByIndex(8) + " " + ">=" + " " + sL.GetByIndex(7)); 
Print("&&" + " " + sL.GetByIndex(7) + " " + ">=" + " " + sL.GetByIndex(6)); 
Print("&&" + " " + sL.GetByIndex(6) + " " + ">=" + " " + sL.GetByIndex(5)); 
Print("&&" + " " + sL.GetByIndex(5) + " " + ">=" + " " + sL.GetByIndex(4)); 
Print("&&" + " " + sL.GetByIndex(4) + " " + ">=" + " " + sL.GetByIndex(3)); 
Print("&&" + " " + sL.GetByIndex(3) + " " + ">=" + " " + sL.GetByIndex(2)); 
Print("&&" + " " + sL.GetByIndex(2) + " " + ">=" + " " + sL.GetByIndex(1)); 
Print("&&" + " " + sL.GetByIndex(1) + " " + ">=" + " " + sL.GetByIndex(0)); 

打印输出结果:

blue> = red;

& & red> = dodBlue;

& & dodBlue> = green;

& & green> = yellow;

& & yellow> = black;

& & black> = cyan;

& & cyan> = orange;

& & orange> = white;

+0

,愿意说的哈希表? – 2011-03-15 05:38:45

回答

0

为什么你不使用LINQ呢? OrderBy()和Distinct()方法将对您有所帮助。

0

你可以用LINQ做到这一点,如下图所示:

 Dictionary<int, string> lst = new Dictionary<int,string>(10); 

     lst.Add(7, "MAX"); 
     lst.Add(2, "A"); 
     lst.Add(1, "A"); 
     lst.Add(8, "0"); 

     Dictionary<int, string> newList = (lst.OrderBy(x => x.Value).ThenBy(x => x.Key)).ToDictionary(x => x.Key,x=>x.Value);