J'ai une chaîne du format "clé1=valeur1;clé2=valeur2;clé3=valeur3;"
Je dois le convertir en dictionnaire pour les paires clé-valeur mentionnées ci-dessus.
Quelle serait la meilleure façon de procéder? Merci.
J'ai une chaîne du format "clé1=valeur1;clé2=valeur2;clé3=valeur3;"
Je dois le convertir en dictionnaire pour les paires clé-valeur mentionnées ci-dessus.
Quelle serait la meilleure façon de procéder? Merci.
Quelque chose comme ça?
var dict = text.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries)
.Select(part => part.Split('='))
.ToDictionary(split => split[0], split => split[1]);
Bien sûr, cela échouera si les hypothèses ne sont pas remplies. Par exemple, un IndexOutOfRangeException
peut être renvoyé si le texte n'est pas au bon format et un ArgumentException
sera renvoyé s'il y a des clés en double. Chacun de ces scénarios nécessitera des modifications différentes. Si des espaces blancs redondants peuvent être présents, vous aurez peut-être besoin de certains string.Trim
si nécessaire.
Ani mis à jour pour prendre en compte le point-virgule à la fin. La clause where garantira que vous disposez d'une clé et d'une valeur avant de créer et d'entrer.
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]);
Voici l'incroyable espace blanc ignorant, corrigeant la dernière valeur ayant ou non un pouvoir de point-virgule des expressions régulières :
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);
Mais sérieusement, Ani mérite des accessoires pour le .ToDictionary(). Je n'y aurais jamais pensé.
Vous pouvez l'écrire comme ceci ou le parcourir en boucle pour le faire vous-même. Dans les deux cas. En fin de compte, vous vous divisez sur ;
pour obtenir les paires d'éléments, puis sur =
pour obtenir la clé et la valeur.
string input = "key1=value1;key2=value2;key3=value3;";
Dictionary<string, string> dictionary =
input.TrimEnd(';').Split(';').ToDictionary(item => item.Split('=')[0], item => item.Split('=')[1]);
Version en boucle :
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]);
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.