0

いくつかのキーペア値を含むファイルがあります

key1 = value1
key2 = value2

[section name]
key3 = value3
key4 = value4

キーが一意であるため、セクション名は気にしません。入力キーの値を取得したいだけです。私は行を読むために以下を持っています。

  var userDataLines = File.ReadAllLines(pathToFile);

そして、私はこのようなものを持っています

 var result = userDataLines.Select(userDataLine => userDataLine.Split(new[] { '=' }))
                           .Where(split => split.Length == 2);

1 つのコレクション内のすべてのキーと値のペアが得られます。

基本的に、ファイルからキーと値を含む辞書を取得したいのですが、その方法がわかりません。誰かが私を正しい方向に向けることができますか?

ありがとう

4

4 に答える 4

5

次のようにToDictionary 拡張メソッドを使用できます。

var result = File.ReadLines(pathToFile)
                 .Select(line => line.Split(new[] { '=' }, 2))
                 .Where(split => split.Length == 2)
                 .ToDictionary(split => split[0], split => split[1]);

(小さな改善: ReadAllLinesの代わりにReadLinesを使用し、各行を最大 2 つの部分に分割します。)

于 2012-05-01T15:47:15.943 に答える
2

これには LINQ 拡張メソッドがあります。

var result = userDataLines.Select(userDataLine => userDataLine.Split(new[] { '=' }))
                           .Where(split => split.Length == 2)
                           .ToDictionary(split => split[0], split => split[1]);
于 2012-05-01T15:47:15.083 に答える
0

ToDictionary拡張メソッドを使用して、キーである要素と値である要素を指定できます。

var dictionary = userDataLines.Select(x => x.Split(new[] { '=' }))
                    .Where(x => x.Length == 2)
                    .ToDictionary(x => x[0], x => x[1]);
于 2012-05-01T15:49:01.847 に答える
0
var result = (from a in userDataLines
              let pairs = a.Split('=')
              where !string.IsNullOrEmpty(a) && !a.Trim().StartsWith("[")
              select new { Key = pairs[0].Trim(), Value = pairs[1].Trim() });

Linq の方が読みやすいと思いますが、ToDictionary メソッドを知りませんでした。

于 2012-05-01T15:49:57.903 に答える