Laden...

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

Erstellt von Golo Roden vor 14 Jahren Letzter Beitrag vor 14 Jahren 945 Views
Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 14 Jahren
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

1.361 Beiträge seit 2007
vor 14 Jahren

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

2.891 Beiträge seit 2004
vor 14 Jahren

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

6.911 Beiträge seit 2009
vor 14 Jahren

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!"

Gelöschter Account
vor 14 Jahren
            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 😉

1.361 Beiträge seit 2007
vor 14 Jahren

@ 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

2.891 Beiträge seit 2004
vor 14 Jahren

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

1.361 Beiträge seit 2007
vor 14 Jahren

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.

Golo Roden Themenstarter:in
4.207 Beiträge seit 2003
vor 14 Jahren
            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