2012-06-13 24 views
6

Soy muy nuevo en los diccionarios. Muy nuevo significado que comencé a usarlos hace aproximadamente 6 horas: p. De todos modos, quiero saber si hay una forma de cambiar la clave de un diccionario.Cambiar la clave de un diccionario

Aquí es mi diccionario:

Dictionary<string, string> Information = new Dictionary<string, string>(); 

Así es como estoy añadiendo al diccionario (esto se dispara cada vez que el usuario introduce información y realiza un botón:

Information.Add(txtObjectNumber.Text, addressCombined); 

Las necesidades de los usuarios para poder editar ambos campos y eliminar todo el registro.

Así que la aplicación necesita agregar txtNumber y txtComments w aquí txtNumber = txtObjectNumber

Gracias por su ayuda.

+0

¿Dónde aparecen 'txtNumber' y' txtComments' en su código? ¿Estás seguro de que deseas utilizar un diccionario en lugar de una lista de objetos que almacenan dos (o más) valores? –

+3

Probablemente no esté utilizando la estructura de datos correcta. – Oded

+0

lo siento, esos son solo los cuadros de texto en los que el usuario puede ingresar datos. Definitivamente debería haber sido más claro. – JLott

Respuesta

3

La clave es el mecanismo que le permitirá encontrar los datos (el "valor") más adelante.

Por ejemplo, si se hizo

information.Add("Kris", "Vandermotten"); 

que sería capaz de encontrar "Vandermotten" volver más tarde si sabe "Kris".

Ahora en ese contexto, ¿qué significa cambiar "Kris"? ¿Pusiste datos bajo el nombre "Kris" y quieres recuperarlos buscando "Bob"? No lo encontrarás.

En cierto modo, las claves del diccionario son muy parecidas a las claves principales en una base de datos relacional. La referencia a la identidad lógica del valor. Entonces, para empezar, deberían identificarlo de manera única.

Entonces, quizás este ejemplo no tenga sentido. Tal vez algo como

information.Add(42, new Person("Kris", "Vandermotten") 

tiene más sentido. La pregunta, por supuesto, es: ¿qué es el 42? A veces hay un candidato natural para esa clave, como un número de empleado o algo, a veces no lo es.

Cuando no hay ninguno, tal vez usted tiene que hacer

List<Person> information = new List<Person>(); 

information.Add(new Person("Kris", "Vandermotten")); 

Y, por supuesto, si un objeto Person permite cambiar el nombre de la primera propiedad, y eso es lo que quiere hacer, y luego hacerlo. Pero "cambiar las teclas del diccionario" no tiene mucho sentido para mí.

+0

Estaba leyendo su ejemplo y estaba como, de dónde sacó "Vandermotten" de. Entonces vi tu nombre al final. Mi único pensamiento fue, nombre increíble. – DidIReallyWriteThat

+0

@CalvinSmith Gracias. Mi padre me lo dio. Pasaré tu comentario junto. ;-) –

10

No es posible modificar directamente una clave. Tendría que eliminarlo y volver a agregarlo.

0

No puede cambiar la clave de un elemento de diccionario existente. Lo que podría hacer es eliminar la clave anterior y agregar una nueva clave/valor en función de la edición.

Ejemplo de caso de uso:

Agregar clave: Nombre, Valor: Bob

ahora quiere cambiar Name a FirstName, que tendría que hacer

Quitar la llave Name de dictionnary Agregar clave : FirstName, Valor: Bob

0

Su uso de un diccionario aquí parece un poco apagado. Como su nombre lo indica, los diccionarios están destinados a proporcionarle una forma de "buscar" un valor, basado en la clave. En su caso, sin embargo, parece que lo está usando para almacenar dos datos relacionados, cualquiera de los cuales puede cambiar. En ese caso, probablemente sea mejor que solo use una lista y cree una clase separada que contenga ambas partes de la información. Algo así como

public class MyData 
{ 
    public string SomeData { get; set; } 
    public string OtherData { get; set; } 
} 

y luego

List<MyData> myDataList; 

O bien, puede ser que incluso quieren tener un diccionario que asigna una clave no cambia (tal vez un identificador de usuario) a la clase personalizada:

Dictionary<string, MyData> myDataDictionary; 
1

Puede usar el método incorporado Remove() para su diccionario. O puede hacerlo de la manera más difícil al recorrer la colección. Aunque tengo curiosidad sobre por qué debería tener que actualizar constantemente las claves, y no solo los valores.

+0

Necesito hacer ambas cosas. Casi todas las claves son los números de los medidores de agua. Cuando se reemplaza una, la clave del producto cambiará y los comentarios pueden cambiar o no. La dirección deberá permanecer igual. – JLott

+0

Parece que necesitas un Dictionary y un Dictionary

+0

Dang ... ¿Por qué no pensé en eso jaja? Gracias, me salvaste de tener que cambiar muchas cosas. Puede ser un poco complicado, pero debería funcionar jaja. – JLott

Cuestiones relacionadas