按键的第二个元素排序字典

Order Dictionary by second element of Key

我正在寻找一种使用 c# 为以下数据制作(排序的)字典的简单方法。

人:

ID Name
n4 Anne
n2 Ben
n3 Ben
n1 Cesar

订单:

PersonID Description
n4 Salami
n4 Ananas
n3 Banana
n2 Apple
n1 Banana
n1 Cheese

对于每个人(ID 是唯一的,姓名不是)我应该有所有的订单。 我必须 显示按 Person.Name 排序的所有行,例如:

字典的Values不是问题,而是Key。 我的第一种方法是使用 Person.ID 作为键:

Dictionary<string, Queue<Order>> lastOrders = new Dictionary<string, Queue<Order>>();

但后来我遇到了问题,字典没有排序(当我使用 SortedDictionary 时,它只会按 ID 而不是名称排序)。这意味着在 foreach 循环中我必须为每个键获取 Person.Name 并创建一个新的有序列表(?)并在新的 foreach 循环中使用它。

因为我需要 Person.ID(作为唯一标识符)和 Person.Name(用于排序)另一个选项可能是:

SortedDictionary<KeyValuePair<string, string>, Queue<Order>> lastOrders;

我认为第一个字符串必须是唯一 ID,第二个字符串必须是名称? 但是,字典再次首先按 ID 而不是名称排序?

因为PersonID永远不会改变(上面的例子不是很好,Persons是静态的,应用程序运行时Persons的数量不能改变),只有字典的Values改变,我认为使用排序字典(或排序一次)比在每次使用(显示)之前对其进行排序更好。 也许我想得太远了。你有更好的主意吗?谢谢

来自评论:

var persons = new SortedDictionary<Person, Queue<Order>>(Comparer<Person>.Create((p1, p2) => p1.Name.CompareTo(p2.Name)));