4

次のように、アプリからいくつかの引数を渡したいです。

app.exe mode=1 thread=single

これらをキーと値のペアのディクショナリに変換したいと思います。一行の提案はありますか?

4

5 に答える 5

8

これは非常に基本的なものであり、エラー条件は考慮されていません。

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());
于 2013-05-14T10:29:15.083 に答える
0

この質問とこの質問の両方に対する既存のすべての回答に感謝します

ここでの元の質問は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);
}
于 2016-02-12T16:10:16.627 に答える
0

これは削除しましたが、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);
于 2013-05-14T10:34:26.737 に答える