8

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

这背后的原因是我想为每个“主”ID保留多个Item-ID(它用于Bot),并且将这些多个ID放入一个值中太慢而无法修改(寻找一个值=>循环槽所有主要 ID 并获取每个值,然后检查该 ID 是否存在)。

例子

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

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

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

任何人都知道这是否可能以及如何做到这一点?提前致谢。

4

5 回答 5

7

编辑: 查看您的编辑,看起来您确实是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]].

于 2013-09-30T20:17:27.640 回答
4

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

于 2013-09-30T20:52:03.777 回答
3

反过来做字典,使值成为项目列表。

如果例如Value是一个字符串并且Key 1-4是整数,那么您的字典可能看起来像:

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

然后检索ValuebytheDictionary["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"];
于 2013-09-30T20:29:01.663 回答
1

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

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

例子:

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

3) 请注意,.Net 有一个专门的“NameValueCollection”类,可能对您来说是理想的:

于 2013-09-30T20:22:22.630 回答
0

假设您已经有了初始字典(将键映射到值),您可以使用一些 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的你的集合。originalKeysoriginalValuenewKey


示例: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}
于 2016-04-14T18:10:46.247 回答