gpt4 book ai didi

c# - 我需要创建一个字典,其中每个键都可以映射到多个值

转载 作者:太空宇宙 更新时间:2023-11-03 20:07:17 24 4
gpt4 key购买 nike

我试图弄清楚如何创建类似于字典的东西,但每个键都可以映射到多个值。

基本上,我需要的是能够将多个值分配给同一个键,而无需提前知道每个键将对应多少个值。我还需要能够在多个场合为现有键添加值。如果我能检测到键 + 值组合何时已经存在,那也很好。

程序应该如何工作的示例:

list.Add(1,5);
list.Add(3,6);
list.Add(1,7);
list.Add(5,4);
list.Add(1,2);
list.Add(1,5);

理想情况下,这应该生成如下表格:

1: 5, 7, 2

3:6

5:4

C# 中是否有任何现有结构可供我使用,或者我是否必须实现自己的类?实现这个类可能不是一个大问题,但我的时间有点短,所以如果我能使用已经存在的东西就太好了。

最佳答案

快速解决方案

正如您已经提到的,Dictionary 是最适合使用的类型。您可以指定键类型和值类型以满足您的需要,在您的情况下您需要一个 int key 和一个 List<int>值(value)。

这很容易创建:

Dictionary<int, List<int>> dictionary = new Dictionary<int, List<int>>();

接下来的挑战是如何添加记录,您不能简单地执行 Add(key, value)因为这会导致重复键的冲突。所以你必须首先检索列表(如果存在)并添加到列表中:

List<int> list = null;
if (dictionary.ContainsKey(key))
{
list = dictionary[key];
}
else
{
list = new List<int>();
dictionary.Add(key, list);
}
list.Add(newValue);

首选解决方案

每次你想添加一个项目时,这显然有太多的行要使用,所以你会想把它扔到一个辅助函数中,或者我的偏好是创建你自己的类来扩展 Dictionary 的功能.像这样:

class ListDictionary<T1, T2> : Dictionary<T1, List<T2>>
{
public void Add(T1 key, T2 value)
{
if (this.ContainsKey(key))
{
this[key].Add(value);
}
else
{
List<T2> list = new List<T2>() { value };
this.Add(key, list);
}
}

public List<T2> GetValues(T1 key)
{
if(this.ContainsKey(key))
return this[key];
return null;
}
}

然后您可以像您最初想要的那样轻松地使用它:

ListDictionary<int, int> myDictionary = new ListDictionary<int, int>();

myDictionary.Add(1,5);
myDictionary.Add(3,6);
//...and so on

然后获取所需键的值列表:

List<int> keyValues = myDictionary.GetValues(key);
//check if NULL before using, NULL means the key does not exist
//alternatively you can check if the key exists with if (myDictionary.ContainsKey(key))

关于c# - 我需要创建一个字典,其中每个键都可以映射到多个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22349285/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com