Cómo implementar valores clave repetibles en C#
Sin decir nada, Softy fue directo al código MutiSortedList
/// SortedList que está ordenado. por Clave y luego por Valor, tanto Clave como Valor se pueden repetir, pero se prohíbe que los pares clave-valor sean idénticos.
///
clase pública MutiSortedList
{ p>
///
/// Las claves iguales también se devuelven como desiguales
///
privado clase MyComparer
{
public int Comparar(TCKey x, TCKey y)
{
int i = x.CompareTo(y);
// (-1) x antes de y/? (1) x después de y
if ( i = = 0) { return (-1); else { return i }
}
}
public MutiSortedList() : base(new MyComparer< TKey>()) { }
público nuevo vacío Agregar (clave TKey, valor de TValue)
{
foreach (KeyValuePair
{ //¿Comprueba si esta clave existe y si el valor se repite?
if (item.Key.Equals(key) && item.Value.Equals (value )) { retorno }
}
base.Add(clave, valor);
}
público nuevo vacío Eliminar( Tecla TKey)
{
for (int i = 0; i < this.Count; i++)
{
if ( Claves[i].Equals(clave)) { base.RemoveAt(i }
}
}
public void Remove(valor de TValue)
{
for (int i = 0; i < this.Count; i++)
{
if (Valores[ i] .Equals(valor)) { base.RemoveAt(i }
<);p> }
}
public void Eliminar (clave TKey, valor de TValue)
{
for (int i = 0; i < this.Count; i++)
{
if (Claves[i].Equals(clave) & Valores[i].Equals(valor)) { base.RemoveAt( i); }
}
}
público nuevo valor de TV esta[tecla TKey]
{
get { return base[key] }
}
///
/// Devuelve la lista de valores correspondiente a la clave p>
///
///
///
///
public IList { obtener { var resultado = nueva Lista for (int i = 0; i < Contar ; i++) { if (Claves[i].Equals(clave)) { resultado.Agregar(Valores[i]) ; } } devuelve resultado; } } }No ordenado, el interno real el contenido es Tupla, en lugar de usar Clave y Valor, use Elemento1 y Elemento2 /// /// En un Diccionario ordenado en el orden predeterminado, Clave y Valor se puede repetir, pero se prohíbe que los pares clave-valor sean idénticos. /// /// clase pública TupleList public void Add(TKey key, TValue value) { foreach (var item in this) { //¿Comprueba si esta clave existe y si el valor se repite? if (item.Item1.Equals(key) && item.Item2.Equals(valor)) { return } } base.Add(new Tuple } public void Remove(tecla TKey) { foreach (var elemento en este) { if (item.Item1.Equals(key )) { Eliminar(elemento); } } } /// /// Tecla de retorno Una lista de valores múltiples correspondientes /// /// /// /// IList pública obtiene { resultado var = nueva lista foreach (var elemento en este) { //¿Comprueba si la clave está presente y si el valor se repite? if (item.Item1.Equals(key) ) { resultado .Add(item.Item2); } } devolver resultado; } } }