私の値がリストである辞書があります。キーを追加するときに、キーが存在する場合、値に別の文字列を追加します(リスト)?キーが存在しない場合は値を持つ新しいリストを使用して新しいエントリを作成し、キーが存在する場合はリスト値exに値を追加します。
Dictionary<string, List<string>> myDic = new Dictionary<string, List<string>>();
myDic.Add(newKey, add to existing list<strings> and not create new one)
これを手動で行うには、次のようなものが必要です。
List<string> existing;
if (!myDic.TryGetValue(key, out existing)) {
existing = new List<string>();
myDic[key] = existing;
}
// At this point we know that "existing" refers to the relevant list in the
// dictionary, one way or another.
existing.Add(extraValue);
ただし、多くの場合、LINQはToLookup
を使用してこれを簡単にします。たとえば、List<Person>
「姓」から「その姓の名」の辞書に変換したい。次を使用できます。
var namesBySurname = people.ToLookup(person => person.Surname,
person => person.FirstName);
辞書を別のクラスにラップします。
public class MyListDictionary
{
private Dictionary<string, List<string>> internalDictionary = new Dictionary<string,List<string>>();
public void Add(string key, string value)
{
if (this.internalDictionary.ContainsKey(key))
{
List<string> list = this.internalDictionary[key];
if (list.Contains(value) == false)
{
list.Add(value);
}
}
else
{
List<string> list = new List<string>();
list.Add(value);
this.internalDictionary.Add(key, list);
}
}
}
辞書に新しい配列を作成するだけです
Dictionary<string, List<string>> myDic = new Dictionary<string, List<string>>();
myDic.Add(newKey, new List<string>(existingList));