Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何制作一个包含多个键的字典,以及一个廉价的包含操作?_C#_.net_Dictionary_Key - Fatal编程技术网

C# 如何制作一个包含多个键的字典,以及一个廉价的包含操作?

C# 如何制作一个包含多个键的字典,以及一个廉价的包含操作?,c#,.net,dictionary,key,C#,.net,Dictionary,Key,基本上,我想做的是一本字典。我需要许多指向该值的值(大致草图:),是的,这可以通过字典完成,但我还需要检查是否存在键(基本上-我得到的值是a到Z,我需要找到它们是否是键,如果是,检索与它们相关联的值)通过查看每个列表来查找值似乎是一个非常昂贵的操作(我还没有测试,但我只是觉得这个操作非常昂贵)。我见过多值词典,但没有多键词典。有什么帮助吗?谢谢:)我建议您使用一个简单的字典,它可以将您的键潜在地映射到相同的值。如果您关心的是TValue是一种需要为其所有相关键一致更新的值类型,那么请在其周围使用

基本上,我想做的是一本
字典
。我需要许多指向该值的值(大致草图:),是的,这可以通过
字典
完成,但我还需要检查是否存在键(基本上-我得到的值是a到Z,我需要找到它们是否是键,如果是,检索与它们相关联的值)通过查看每个列表来查找值似乎是一个非常昂贵的操作(我还没有测试,但我只是觉得这个操作非常昂贵)。我见过
多值词典
,但没有多键词典。有什么帮助吗?谢谢:)

我建议您使用一个简单的
字典
,它可以将您的键潜在地映射到相同的值。如果您关心的是
TValue
是一种需要为其所有相关键一致更新的值类型,那么请在其周围使用类包装器,以便所有所述键都指向同一实例

例如:

public class Wrapper<TValue>
{
    public TValue Value { get; set; }
}

static void Main(string[] args)
{
    var d = new Dictionary<char, Wrapper<int>>();
    d.Add('A', new Wrapper<int> { Value = 1 });
    d.Add('B', d['A']);   // same value as 'A'
    d.Add('C', new Wrapper<int> { Value = 2 });
    d.Add('D', new Wrapper<int> { Value = 3 });
    d.Add('E', d['D']);   // same value as 'D'
    d.Add('F', d['D']);   // same value as 'D'

    d['B'].Value--;   // decrement 'B' value from '1' to '0'
    Console.WriteLine(d['A'].Value);   // new value shows up for 'A' too
}
公共类包装器
{
公共TValue值{get;set;}
}
静态void Main(字符串[]参数)
{
var d=新字典();
d、 添加('A',新包装{Value=1});
d、 Add('B',d['A']);//与'A'相同的值
d、 添加('C',新包装{Value=2});
d、 添加('d',新包装{Value=3});
d、 Add('E',d['d']);//与'd'相同的值
d、 Add('F',d['d']);//与'd'相同的值
d['B'].值--;//将'B'值从'1'递减到'0'
Console.WriteLine(d['A'].Value);//也会为'A'显示新值
}

您可以通过一个底层的
还原性
值持有者
作为用于间接寻址的私有类来实现它。也许你甚至不需要它,但你可以复制它的值。@Lucastzesniewski这就是我所需要的,谢谢你!这正是我需要的。谢谢:)(将接受3)干杯!为了方便起见,您可以找到包装器实现。