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''}");