【发布时间】:2018-09-16 05:39:55
【问题描述】:
所以我有一个数字和颜色值列表。
[1, Red]
[4, Yellow]
[5, Red]
[6, Yellow]
[8, White]
[9, Red]
[10, Yellow]
[13, White]
etc. etc.
字典整数最初是使用 Enumerable 在 1 - 100 之间的范围内随机生成的。 var lstNumbers = Enumerable
.Range(1, 100).OrderBy(n => Guid.NewGuid().GetHashCode())
.ToList();
创建字典并用于将 ColorType 值分配给序列中的每个数字 Red、Yellow、White、Red、Yellow、White 等,等等。给列表中的所有数字。var map = new Dictionary<int, ColorType>();
然后我以几种不同的方式删除项目,这将我带到了排序中。我需要按值对这个字典中的最终列表进行排序,白色结果在顶部,黄色在中间,红色在底部。红
然后显示。
我想我可以使用一些 if 语句对颜色进行排序,或者为每种颜色设置参数,然后使用 Orderby 以按颜色值对结果进行排序。
我很难找出以这种方式对这些特定值进行排序的有效方法。
有什么想法吗?
【问题讨论】:
-
你知道字典没有排序吗?
-
您可以执行
dict.OrderBy(c => c.Value == "White" ? 0 : c.Value == "Yellow" ? 1 : 2)之类的操作。只是不要将结果放回字典,因为字典是无序结构。将它们放入List或类似的地方。 -
@raichiks 我试着看看这是否有帮助,但我有 100 个关键整数,所以除非我想制作 100 个数据值,否则我认为重复的帖子不会有帮助。应该是更有效的方式吧?
-
@Evk 我尝试了 OrderBy 但我可能没有正确实现它,或者它可能不适用于我的场景,因为我得到了 == 运算符不能应用于“ColorType”操作数的错误和“字符串”。
foreach (var color in map.OrderBy(c => c.Value == "White" ? 0 : c.Value == "Yellow" ? 1 : 2)) { Console.WriteLine(color); }
标签: c# sorting dictionary key-value