次のように、アプリからいくつかの引数を渡したいです。
app.exe mode=1 thread=single
これらをキーと値のペアのディクショナリに変換したいと思います。一行の提案はありますか?
これは非常に基本的なものであり、エラー条件は考慮されていません。
var dictionary = args.Select(a => a.Split('='))
.ToDictionary(a => a[0], a => a.Length == 2 ? a[1] : null);
潜在的なエラーのいくつかは次のとおりです。
=
それらを処理すると、少し醜くなります。
var dictionary = args.Select(a => a.Split(new [] {'='}, 2))
.GroupBy(a => a[0], a => a.Length == 2 ? a[1] : null)
.ToDictionary(g => g.Key, g => g.FirstOrDefault());
この質問とこの質問の両方に対する既存のすべての回答に感謝します
ここでの元の質問は1行の回答を求めているので、ここに1行あります。
private static void Main(string[] args)
{
Dictionary<string, string> cmdArgs = args.Select(s => new Regex(@"/(?<name>.+?):(?<val>.+)").Match(s)).Where(m => m.Success).ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value);
}
これは削除しましたが、OPが「1行の提案」を求めたという理由だけで、ここに残します。:)
var result = (from item in data.Split(' ') let keyValue = item.Split('=') select new {Key = keyValue[0], Value = keyValue[1]}).ToDictionary(item => item.Key, item => item.Value);