2015-10-05 43 views
0

我正在尋找一個可以將多個鍵映射到單個對象的C#容器。例如:一個人可以用他的英文名稱或他的西班牙文名稱來引用。我想這樣做,以便我不必創建多個字典副本,並且當我從結構中添加/刪除時,我只需添加/刪除一次。這樣的結構是否存在?C#將多個鍵映射到一個值

+0

如何添加/刪除工作?一個'params []'超載?在我看來,你仍然需要多次調用'dict.Add()',這意味着@ Verarind的解決方案是最好的選擇。 –

+0

是的,我實際上已經考慮過多鍵/多字典解決方案,但我必須支持50多種語言!無論哪種方式,這意味着50人的一個人的副本,我做了很多添加/刪除。這有點浪費空間。想知道是否有更優雅的解決方案。 – user3685285

+1

@ user3685285 _waste of space_?你需要將一個鍵存儲到一個指針。我不認爲有一種結構比字典需要更少的空間,並且支持快速訪問值。 –

回答

2

是它存在: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); 

編輯 跌宕我明白了:只有一個添加和去掉?嗯。不知道這樣的結構存在。也許你可以添加一個擴展方法來處理這種情況。

我更改了代碼...

相關問題