2010-04-30 35 views
47

Ok ... aquí hay una pregunta de softbol ...¿Cómo insertar un elemento en un objeto de par clave/valor?

Solo necesito poder insertar un par de clave/valor en un objeto en una posición específica. Actualmente estoy trabajando con una Hashtable que, por supuesto, no permite esta funcionalidad. ¿Cuál sería el mejor enfoque?

ACTUALIZACIÓN: También necesito la capacidad de buscar por la clave.

... Por ejemplo simplificado y pseudocoded sino que debe transmitir el punto de

// existing Hashtable 
myHashtable.Add("somekey1", "somevalue1"); 
myHashtable.Add("somekey2", "somevalue2"); 
myHashtable.Add("somekey3", "somevalue3"); 

// Some other object that will allow me to insert a new key/value pair. 
// Assume that this object has been populated with the above key/value pairs. 
oSomeObject.Insert("newfirstkey","newfirstvalue"); 

Gracias de antemano.

Respuesta

83
List<KeyValuePair<string, string>> kvpList = new List<KeyValuePair<string, string>>() 
{ 
    new KeyValuePair<string, string>("Key1", "Value1"), 
    new KeyValuePair<string, string>("Key2", "Value2"), 
    new KeyValuePair<string, string>("Key3", "Value3"), 
}; 

kvpList.Insert(0, new KeyValuePair<string, string>("New Key 1", "New Value 1")); 

Utilizando este código:

foreach (KeyValuePair<string, string> kvp in kvpList) 
{ 
    Console.WriteLine(string.Format("Key: {0} Value: {1}", kvp.Key, kvp.Value); 
} 

la salida esperada debe ser:

Key: New Key 1 Value: New Value 1 
Key: Key 1 Value: Value 1 
Key: Key 2 Value: Value 2 
Key: Key 3 Value: Value 3 

Lo mismo trabajar con un KeyValuePair o cualquier otro tipo que desea utilizar ..

Editar -

para buscar por la clave, puede hacer lo siguiente:

var result = stringList.Where(s => s == "Lookup"); 

Usted puede hacer esto con un KeyValuePair de la siguiente manera:

var result = kvpList.Where (kvp => kvp.Value == "Lookup"); 

Última edición -

Hizo la respuesta específica a KeyValuePair en lugar de a cadena.

+0

Disculpas, acabo de actualizar para aclarar que necesito la capacidad de buscar por la clave. – Clay

+0

Ver mi edición de cómo hacerlo. –

+1

Excelente, ¡gracias! – Clay

1

Hashtables no se ordenan por sí, la mejor opción es utilizar otra estructura tal como un SortedList o un ArrayList

+0

El Hashtable es un código preexistente que preferiría no cambiar en este momento. – Clay

0

me gustaría utilizar el Dictionary<TKey, TValue> (siempre que cada tecla es único).

EDIT: Lo sentimos, se dio cuenta de que quería agregarlo a una posición específica. Mi error. Puede usar un SortedDictionary pero esto aún no le permitirá insertarlo.

+0

Pero el diccionario carece de 'Insertar()' .... –

3

¿Necesita buscar objetos por la clave? Si no, considere usar List<Tuple<string, string>> o List<KeyValuePair<string, string>> si no está utilizando .NET 4.

+0

Sí, necesito buscar por clave. – Clay

2

Utilice una lista vinculada. Fue diseñado para esta situación exacta.
Si aún necesita las búsquedas del diccionario O (1), use un diccionario y una lista vinculada.

Cuestiones relacionadas