「key1=value1;key2=value2;key3=value3;」という形式の文字列があります。
上記のキーと値のペアの辞書に変換する必要があります。
これについて最善の方法は何ですか?ありがとう。
「key1=value1;key2=value2;key3=value3;」という形式の文字列があります。
上記のキーと値のペアの辞書に変換する必要があります。
これについて最善の方法は何ですか?ありがとう。
このようなもの?
var dict = text.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries)
.Select(part => part.Split('='))
.ToDictionary(split => split[0], split => split[1]);
もちろん、前提が満たされない場合、これは失敗します。たとえばIndexOutOfRangeException
、テキストが正しい形式でない場合はArgumentException
がスローされ、重複するキーがある場合は がスローされます。これらのシナリオごとに、異なる変更が必要になります。冗長な空白が存在する可能性がある場合は、必要に応じていくつかのstring.Trim
呼び出しが必要になる場合があります。
末尾のセミコロンを考慮してアニを更新。where 句は、作成およびエントリの前にキーと値があることを確認します。
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]);
正規表現のセミコロンの力がある場合とない場合の最後の値を無視して修正する、すばらしい空白を見てください。
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);
しかし、真剣に、Aniは.ToDictionary()の小道具に値します。私はそれを考えたことはなかったでしょう。
このように書くか、ループして自分で行うことができます。どちらにしても。最終的に;
、アイテムのペアを取得するために分割し、次に=
キーと値を取得します。
string input = "key1=value1;key2=value2;key3=value3;";
Dictionary<string, string> dictionary =
input.TrimEnd(';').Split(';').ToDictionary(item => item.Split('=')[0], item => item.Split('=')[1]);
ループバージョン:
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]);
}