C#将多个键映射到一个值

C#将多个键映射到一个值

问题描述:

我正在寻找一个可以将多个键映射到单个对象的C#容器。例如:一个人可以用他的英文名称或他的西班牙文名称来引用。我想这样做,以便我不必创建多个字典副本,并且当我从结构中添加/删除时,我只需添加/删除一次。这样的结构是否存在?C#将多个键映射到一个值

+0

如何添加/删除工作?一个'params []'超载?在我看来,你仍然需要多次调用'dict.Add()',这意味着@ Verarind的解决方案是最好的选择。 –

+0

是的,我实际上已经考虑过多键/多字典解决方案,但我必须支持50多种语言!无论哪种方式,这意味着50人的一个人的副本,我做了很多添加/删除。这有点浪费空间。想知道是否有更优雅的解决方案。 – user3685285

+1

@ user3685285 _waste of space_?你需要将一个键存储到一个指针。我不认为有一种结构比字典需要更少的空间,并且支持快速访问值。 –

是它存在:Dictionary<TKey, TValue>

没有理由为什么你不能与多个键添加一个对象实例:

public class Person 
{ 
    public string EnglishName { get; set; } 
    public string SpanishName { get; set; } 
} 

public static class PersonDictExtensions 
{ 
    public static void AddPerson(this IDictionary<string, Person> persons, Person person) 
    { 
     persons.Add(person.EnglishName, person); 
     persons.Add(person.SpanishName, person); 
    } 

    public static void RemovePerson(this IDictionary<string, Person> persons, Person person) 
    { 
     foreach (var item in persons.Where(x => object.ReferenceEquals(x.Value, person)).ToList()) 
     { 
      persons.Remove(item.Key); 
     } 
    } 
} 

var person = new Person { EnglishName = "Foo", SpanishName = "Bar" }; 
var dict = new Dictionary<string, Person>(); 
dict.AddPerson(person); 
dict.RemovePerson(person); 

编辑 跌宕我明白了:只有一个添加和去掉?嗯。不知道这样的结构存在。也许你可以添加一个扩展方法来处理这种情况。

我更改了代码...