2009-11-30 8 views
6

¿Cómo puedo actualizar los valores de una tabla hash por otra tabla hash,¿hashtable de actualización por otra hashtable?

si la segunda tabla hash contiene claves nuevas, entonces deben agregarse a la 1ra. Debería actualizar el valor de 1st hashtable.

+0

¿Tiene algún código para mostrarnos, para ver cómo podemos ayudarlo? En otras palabras, ¿qué has intentado? –

+0

¿Está buscando fusionar dos tablas hash? –

+0

sí exactamente lo último con hashtable viejo. – shahjapan

Respuesta

16
foreach (DictionaryEntry item in second) 
{ 
    first[item.Key] = item.Value; 
} 

Si es necesario, se podría rodar esto en un método de extensión (si se asume que está utilizando .NET 3.5 o más reciente).

Hashtable one = GetHashtableFromSomewhere(); 
Hashtable two = GetAnotherHashtableFromSomewhere(); 

one.UpdateWith(two); 

// ... 

public static class HashtableExtensions 
{ 
    public static void UpdateWith(this Hashtable first, Hashtable second) 
    { 
     foreach (DictionaryEntry item in second) 
     { 
      first[item.Key] = item.Value; 
     } 
    } 
} 
+0

Esto no captura uno de los requisitos "si la segunda tabla hash contiene claves nuevas, entonces deben agregarse a la 1ra", y probablemente lanzará una excepción – ParmesanCodice

+5

@ParmesanCodice: Cumple con ese requisito * exactamente *. ¿Por qué no lo pruebas y lo ves por ti mismo? De la documentación de MSDN: "También puede usar la propiedad Item para agregar nuevos elementos estableciendo el valor de una clave que no existe en la Hashtable ... Sin embargo, si la clave especificada ya existe en la Hashtable, establezca la propiedad Item sobrescribe el valor anterior ". http://msdn.microsoft.com/en-us/library/system.collections.hashtable.item.aspx – LukeH

+0

@Luke, mis disculpas, no estaba al tanto de este comportamiento. – ParmesanCodice

0

un cierto código en que (basado en el Diccionario):

 foreach (KeyValuePair<String, String> pair in hashtable2) 
     { 
      if (hashtable1.ContainsKey(pair.Key)) 
      { 
       hashtable1[pair.Key] = pair.Value; 
      } 
      else 
      { 
       hashtable1.Add(pair.Key, pair.Value); 
      } 
     } 

Estoy seguro de que hay una solución más elegante usando LINQ (sin embargo, el código en 2.0;)).

+0

Esto no se compila. ¿Está destinado a ser C# real o simplemente pseudocódigo? – LukeH

+0

@Luke: Gracias, realmente debería comenzar a codificar en C# si doy respuestas sobre tales preguntas ... – Bobby

+0

Compila bien ahora y funciona correctamente para 'Dictionary ', pero no funcionará para 'Hashtable'. – LukeH