Red de conocimiento del abogados - Preguntas y respuestas jurídicas - Cómo implementar valores clave repetibles en C#

Cómo implementar valores clave repetibles en C#

Sin decir nada, Softy fue directo al código MutiSortedList que está ordenado por Clave ///

/// 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 : SortedList donde TKey : IComparable

{

///

/// Las claves iguales también se devuelven como desiguales

///

privado clase MyComparer : IComparer donde TCKey : IComparable

{

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 elemento en esto)

{ //¿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

///

///

///

/// Devolver IList(Of value)

public IList this[TKey key, bool orden ascendente] ?

{

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.

/// Heredado de

///

clase pública TupleList : Lista> {

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(clave, valor));

}

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

///

///

///

/// Devuelve IList(De valor)>p>

IList pública this[tecla TKey, bool orden ascendente = false] {

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;

}

}

}