C# 字典:每个值多个键

本文关键字:字典 | 更新日期: 2023-09-27 18:33:25

我正在寻找一种使用单个获取多个的方法。是的,我已经使用过搜索功能,但大多数答案都是相反的方向(每个多个),但我想要相反。

这背后的原因是,我希望每个"主"ID 保留多个 Item-ID(用于机器人),并且将这些多个 ID 扔到一个值中太慢而无法修改(查找一个值 =>遍历所有主 ID 并获取每个值,然后检查该 ID 是否存在)。

Key 1 => Value
Key 2 => Value
Key 3 => Value
Key 4 => Value
Key 5 => Value 2

查找值应返回:键 1-4,而不是 5

所以我正在寻找一种更容易做到这一点的方法——就像我上面说的。

有人知道这是否可能以及如何做到吗?提前谢谢。

C# 字典:每个值多个键

编辑:看看你的编辑,看起来你真的把这个Dictionary设计了......您的键应该用于匹配值,而不是用于匹配键的值。

您可以执行一些操作,例如创建一个将外部键映射到内部键的字典,然后使用内部键为第二个字典编制索引。

例:

var outer = new Dictionary<int, Guid> {
  { 1, GuidA },
  { 2, GuidA },
  { 3, GuidA },
  { 4, GuidA },
  { 5, GuidB }
};
var inner = new Dictionary<Guid, Value> {
  { GuidA, Value1 },
  { GuidB, Value2 }
};

您可以按以下方式访问它:value = outer[inner[key]] .

你可能想多了你的问题。 键必须是唯一的,以便对查找操作有用。 值不需要是唯一的。 多个键可以指向相同的值,而不会引起问题。

相反的方式执行字典,并使值成为项目列表。

例如,如果Value是一个字符串,Key 1-4是整数,你的字典可能看起来像这样:

var theDictionary = new Dictionary<string, List<int>>();
然后,按

theDictionary["Value"] 检索Value将返回包含 1、2、3 和 4 的整数列表。

编辑 - 添加了示例:

var theDictionary = new Dictionary<string, List<string>>
    {
        {"Value", new List<string> {"Key 1", "Key 2", "Key 3", "Key 4", "Key 5",}},
        {"Value2", new List<string> {"Key 5", "Key 2"}}
    };
var oneToFour = theDictionary["Value"];

1)Servy 是绝对正确的。 如果您正在搜索除键以外的任何内容...如果您尝试检索除相应值以外的任何内容......那么肯定有问题。 在所有条件相同的情况下,您可能不想要字典。

2)根据你所说的,也许更好的集合类型可能是列表。具体而言,名称/值对的列表。

例:

List<string> NVList = new List<string>();
NVList.Add("color=blue");
...

3)请注意,.Net有一个专门的"NameValueCollection"类,可能非常适合您:

  • http://msdn.microsoft.com/en-us/library/system.collections.specialized.namevaluecollection.aspx

假设您已经拥有初始字典(将键映射到值),您可以使用一些 Linq 将其转换为反向字典,而无需手动创建反向字典。

var newDict = initialDict.Select(x=>x.Value).Distinct().ToDictionary(x=>x, x=> initialDict.Where(kvp=>kvp.Value == x).Select(kvp=>kvp.Key));

从原始词典中选择不同的originalValues,并将其用作newKeys。 您的newValues是映射到每个originalValue/newKey的一组originalKeys


示例:https://dotnetfiddle.net/dhwUSC

给定初始字典

var initialDict = new Dictionary<int, string>{
        {1, "Value"},
        {2, "Value"},
        {3, "Value"},
        {4, "Value"},
        {5, "Value2"}
    };

上面的函数返回

Value: {1, 2, 3, 4}
Value2: {5}