/Collections/Specialized/MultiKeyDictionary.cs |
@@ -29,8 +29,15 @@ |
} |
} |
|
public new IEnumerable<V> Values => |
base.Values.SelectMany(baseDict => baseDict.Keys, (baseDict, baseKey) => baseDict[baseKey]); |
public new IEnumerable<V> Values |
{ |
get |
{ |
return from baseDict in base.Values |
from baseKey in baseDict.Keys |
select baseDict[baseKey]; |
} |
} |
|
public void Add(K1 key1, K2 key2, V value) |
{ |
@@ -39,29 +46,10 @@ |
this[key1][key2] = value; |
} |
|
public void Remove(K1 key1, K2 key2) |
{ |
if (!ContainsKey(key1) || !this[key1].ContainsKey(key2)) |
return; |
this[key1].Remove(key2); |
Remove(key1); |
} |
|
public bool ContainsKey(K1 key1, K2 key2) |
{ |
return ContainsKey(key1) && this[key1].ContainsKey(key2); |
return base.ContainsKey(key1) && this[key1].ContainsKey(key2); |
} |
|
public bool TryGetValue(K1 key1, K2 key2, out V value) |
{ |
if (!ContainsKey(key1) || !this[key1].ContainsKey(key2)) |
{ |
value = default(V); |
return false; |
} |
value = base[key1][key2]; |
return true; |
} |
} |
|
public class MultiKeyDictionary<K1, K2, K3, V> : Dictionary<K1, MultiKeyDictionary<K2, K3, V>> |
@@ -79,35 +67,8 @@ |
|
public bool ContainsKey(K1 key1, K2 key2, K3 key3) |
{ |
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3); |
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3); |
} |
|
public void Add(K1 key1, K2 key2, K3 key3, V value) |
{ |
if (!ContainsKey(key1)) |
this[key1] = new MultiKeyDictionary<K2, K3, V>(); |
this[key1][key2, key3] = value; |
} |
|
public void Remove(K1 key1, K2 key2, K3 key3) |
{ |
if (!ContainsKey(key1) || !this[key1].ContainsKey(key2, key3)) |
return; |
this[key1][key2].Remove(key3); |
this[key1].Remove(key2); |
Remove(key1); |
} |
|
public bool TryGetValue(K1 key1, K2 key2, K3 key3, out V value) |
{ |
if (!ContainsKey(key1) || !this[key1].ContainsKey(key2, key3)) |
{ |
value = default(V); |
return false; |
} |
value = base[key1][key2, key3]; |
return true; |
} |
} |
|
public class MultiKeyDictionary<K1, K2, K3, K4, V> : Dictionary<K1, MultiKeyDictionary<K2, K3, K4, V>> |
@@ -125,7 +86,7 @@ |
|
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4) |
{ |
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4); |
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4); |
} |
} |
|
@@ -144,7 +105,7 @@ |
|
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5) |
{ |
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5); |
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5); |
} |
} |
|
@@ -164,7 +125,7 @@ |
|
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6) |
{ |
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6); |
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6); |
} |
} |
|
@@ -184,7 +145,7 @@ |
|
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7) |
{ |
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7); |
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7); |
} |
} |
|
@@ -204,7 +165,7 @@ |
|
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7, K8 key8) |
{ |
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8); |
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8); |
} |
} |
|
@@ -224,7 +185,7 @@ |
|
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7, K8 key8, K9 key9) |
{ |
return ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8, key9); |
return base.ContainsKey(key1) && this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8, key9); |
} |
} |
|
@@ -248,7 +209,7 @@ |
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7, K8 key8, K9 key9, |
K10 key10) |
{ |
return ContainsKey(key1) && |
return base.ContainsKey(key1) && |
this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8, key9, key10); |
} |
} |
@@ -276,7 +237,7 @@ |
public bool ContainsKey(K1 key1, K2 key2, K3 key3, K4 key4, K5 key5, K6 key6, K7 key7, K8 key8, K9 key9, |
K10 key10, K11 key11) |
{ |
return ContainsKey(key1) && |
return base.ContainsKey(key1) && |
this[key1].ContainsKey(key2, key3, key4, key5, key6, key7, key8, key9, key10, key11); |
} |
} |