Laden...

String der Form key1=value1;key2=value2;... in Dictionary<string, string> konvertieren?

Letzter Beitrag vor 15 Jahren 9 Posts 1.031 Views
String der Form key1=value1;key2=value2;... in Dictionary<string, string> konvertieren?

Hallo,

ich habe einen String der Form

key1=value1;key2=value2;...;keyN=valueN;

und möchte diesen als Dictionary<string, string> verarbeiten. Die Frage ist nun, wie ich aus dem String das Dictionary basteln kann.

Mir ist klar, dass es mit zweifachem Aufruf von String.Split und einer foreach-Schleife und ein paar if's funktioniert - wirklich elegant kommt mir das aber nicht vor.

Hat jemand eine bessere Idee, wie man das machen kann, oder gibt es vielleicht sogar im Framework schon etwas vorgefertigtes für diesen Fall?

Viele Grüße,

Golo

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de

Hi Golo,

Mit RegularExpressions und expliziten Gruppen wäre das doch halbwegs elegant möglich:


            Dictionary<string, string> d = new Dictionary<string,string>();
            foreach(Match m in Regex.Matches(myString, @"(?<key>[^=;]*)=(?<value>[^=;]*);"))
            {
                d.Add(m.Groups["key"].Value, m.Groups["value"].Value);
            }

Vielleicht kann man so dann auch was mit LINQ noch zaubern?

beste Grüße
zommi

Vielleicht kann man so dann auch was mit LINQ noch zaubern?


Dictionary<string,string> dictionary = new Dictionary<string,string>();
string content = "key1=value1;key2=value2;keyN=valueN;";

content.Split(new char[] { ';'},StringSplitOptions.RemoveEmptyEntries)
.Select(item => item.Split('='))
.Select(itemArray => new { Key = itemArray[0],Value = itemArray[1] }).ToList()
.ForEach(kvp => dictionary.Add(kvp.Key,kvp.Value));

Gruß,
dN!3L

Hallo dN!3L,

es gibt auch die ToDictionary-Erweirungsmethode die statt dem Select und Foreach verwendet werden kann.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

            string content = "key1=value1;key2=value2;keyN=valueN;";

            Dictionary<string, string> dictionary = content.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries)
                .Select(item => item.Split('='))
                .ToDictionary(itemarray => itemarray[0], itemarray => itemarray[1]);

edit: hach verdammt... zu langsam 😉

@ gfoidl
Cool !
Das meinte ich mit "Vielleicht kann man so dann auch was mit LINQ noch zaubern?"

Also dann:


Regex reg = new Regex(@"(?<key>[^=;]*)=(?<value>[^=;]*);");

Dictionary<string, string> d = reg.Matches(myString).ToDictionary(m => m.Groups["key"].Value, m => m.Groups["value"].Value);
 

beste Grüße
zommi

es gibt auch die ToDictionary-Erweirungsmethode die statt dem Select und Foreach verwendet werden kann.

Toll. Wieder was gelernt. 8)

Also dann:

Also bei mir kann ich ToDictionary nicht auf eine MatchCollection anwenden...
Folgendermaßen gehts:


Dictionary<string,string> dictionary =
	Regex.Matches(content,@"(?<key>[^=;]*)=(?<value>[^=;]*);").OfType<Match>()
	.ToDictionary(match => match.Groups["key"].Value,match => match.Groups["value"].Value);

Gruß,
dN!3L

Also bei mir kann ich ToDictionary nicht auf eine MatchCollection anwenden... Habs nur so hingeschrieben, hab grad kein aktuelles VS an Board, wo ichs hätte probieren können.

            string content = "key1=value1;key2=value2;keyN=valueN;";  
  
            Dictionary<string, string> dictionary = content.Split(new char[] {';'}, StringSplitOptions.RemoveEmptyEntries)  
                .Select(item => item.Split('='))  
                .ToDictionary(itemarray => itemarray[0], itemarray => itemarray[1]);  

Super, vielen Dank 😃!

Wissensvermittler und Technologieberater
für .NET, Codequalität und agile Methoden

www.goloroden.de
www.des-eisbaeren-blog.de