0
我正在尋找一個可以將多個鍵映射到單個對象的C#容器。例如:一個人可以用他的英文名稱或他的西班牙文名稱來引用。我想這樣做,以便我不必創建多個字典副本,並且當我從結構中添加/刪除時,我只需添加/刪除一次。這樣的結構是否存在?C#將多個鍵映射到一個值
我正在尋找一個可以將多個鍵映射到單個對象的C#容器。例如:一個人可以用他的英文名稱或他的西班牙文名稱來引用。我想這樣做,以便我不必創建多個字典副本,並且當我從結構中添加/刪除時,我只需添加/刪除一次。這樣的結構是否存在?C#將多個鍵映射到一個值
沒有理由爲什麼你不能與多個鍵添加一個對象實例:
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);
編輯 跌宕我明白了:只有一個添加和去掉?嗯。不知道這樣的結構存在。也許你可以添加一個擴展方法來處理這種情況。
我更改了代碼...
如何添加/刪除工作?一個'params []'超載?在我看來,你仍然需要多次調用'dict.Add()',這意味着@ Verarind的解決方案是最好的選擇。 –
是的,我實際上已經考慮過多鍵/多字典解決方案,但我必須支持50多種語言!無論哪種方式,這意味着50人的一個人的副本,我做了很多添加/刪除。這有點浪費空間。想知道是否有更優雅的解決方案。 – user3685285
@ user3685285 _waste of space_?你需要將一個鍵存儲到一個指針。我不認爲有一種結構比字典需要更少的空間,並且支持快速訪問值。 –