una reemplazar recortar quitar extraer ejemplos comas caracteres cadena c# string dictionary delimiter

reemplazar - string c# ejemplos



Convertir una cadena delimitada en un diccionario<cadena, cadena> en C# (5)

Tengo una cadena con el formato "clave1 = valor1; clave2 = valor2; clave3 = valor3;"

Necesito convertirlo en un diccionario para los pares de valores clave mencionados anteriormente.

¿Cuál sería la mejor manera de hacer esto? Gracias.


¿Algo como esto?

var dict = text.Split(new[] {'';''}, StringSplitOptions.RemoveEmptyEntries) .Select(part => part.Split(''='')) .ToDictionary(split => split[0], split => split[1]);

Por supuesto, esto fallará si no se cumplen los supuestos. Por ejemplo, se puede lanzar una IndexOutOfRangeException si el texto no está en el formato correcto y se lanzará una ArgumentException si hay claves duplicadas. Cada uno de estos escenarios requerirá diferentes modificaciones. Si pudiera haber espacio en blanco redundante, es posible que necesite alguna string.Trim .


Ani''s actualizado para tener en cuenta el punto y coma al final. La cláusula where asegurará que usted tenga una clave y un valor antes de crear e ingresar.

var dictionary = "key1=value1;key2=value2;key3=value3;" .Split('';'') .Select (part => part.Split(''='')) .Where (part => part.Length == 2) .ToDictionary (sp => sp[0], sp => sp[1]);


Observa el impresionante espacio en blanco que ignora, corrige el último valor que tiene o no un poder de punto y coma de expresiones regulares:

var dict = Regex.Matches("key1 = value1; key2 = value2 ; key3 = value3", @"/s*(.*?)/s*=/s*(.*?)/s*(;|$)") .OfType<Match>() .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value);

Pero en serio, Ani merece accesorios para el .ToDictionary (). Nunca hubiera pensado en eso.


Podrías escribirlo así o hacer un bucle para hacerlo tú mismo. De cualquier manera. En última instancia, estás dividiendo en ; para obtener los pares de elementos, luego en = para obtener la clave y el valor.

string input = "key1=value1;key2=value2;key3=value3;"; Dictionary<string, string> dictionary = input.TrimEnd('';'').Split('';'').ToDictionary(item => item.Split(''='')[0], item => item.Split(''='')[1]);

Versión de bucle:

Dictionary<string, string> dictionary = new Dictionary<string, string>(); string[] items = input.TrimEnd('';'').Split('';''); foreach (string item in items) { string[] keyValue = item.Split(''=''); dictionary.Add(keyValue[0], keyValue[1]); }


Puedes hacer esto usando la cadena JSON, por ejemplo:

var dic = JsonConvert.DeserializeObject<Dictionary<int, string>>("{''1'':''One'',''2'':''Two'',''3'':''Three''}");