【问题标题】:How do I order a dictionary based off of another dictionary? C#如何根据另一本词典订购词典? C#
【发布时间】:2018-10-17 01:02:02
【问题描述】:

所以我想要做的是根据另一个字典的(dict1)排序基于它的键来排序一个字典(dict2);这两个字典具有相同的值但不同的键。 下面有一个图表可以可视化我正在尝试做的事情。

enter image description here

【问题讨论】:

  • 字典是基于键的。键的顺序对那些人来说无关紧要。事实上,缺少订单匹配是它们(与列表、数组和其他基于索引的东西不同)可以成为线程保存的原因。您也许可以在输出期间以某种方式对它们进行排序,但如何进行往往取决于您的 UI 技术,而不是实际代码。
  • 请说明你这样做是为了什么,这将有助于社区提出最佳答案。
  • 您当然可以做的是:创建一个包含键/值对的两个部分的类、结构或元组。制作该类型的数组。对所述数组进行排序或按照您的规则对其进行完全排序。
  • @tymtam 我这样做是为了订购,因为我已经有一段时间没有用 C# 编码了,而是我一直在用 Java 编码,我试图找出类似于 Java 中的 HashMap 的东西.
  • @Rufus L 刚刚注意到我在图片中的错误应该是 dict2 而不是 dict1,我马上改掉。

标签: c# linq dictionary


【解决方案1】:

您可以使用 Linq 根据另一部字典中的值的索引来排序一个字典。可能有一种更短的方法,但这应该可行:

var dict1 = new Dictionary<int, string>
{
    {12, "hello"},
    {67, "green"},
    {29, "blue"},
    {15, "red"},
    {40, "house"}
};

var dict2 = new Dictionary<string, string>
{
    {"tree", "green"},
    {"person", "hello"},
    {"car", "red"},
    {"floor", "red"},
    {"dirt", "green"},
};

var ordered = dict2
    .OrderBy(d2Item => dict1.FirstOrDefault(d1Item => d1Item.Value == d2Item.Value).Key)
    .ToDictionary(item => item.Key, item => item.Value);

【讨论】:

  • 谢谢,这正是我想要的。
猜你喜欢
  • 1970-01-01
  • 2011-05-15
  • 1970-01-01
  • 2014-07-25
  • 2021-05-23
  • 1970-01-01
  • 2023-03-06
  • 2019-01-28
相关资源
最近更新 更多