1

最初の列がキーになり、2 番目の列が値になるディクショナリとして格納される 2 つの列で構成されるファイルがあります。2 番目の列は、任意の数のスペースまたはタブである空白で区切られます。

Split() 関数を使用してこれを Dictionary に保存するにはどうすればよいですか?

        recipesFile = new StreamReader(recipesRes.Stream);
        char[] splitChars = {'\t', ' '};

        while (recipesFile.Peek() > 0)
        {
            string recipesLine = "";
            recipesLine = recipesFile.ReadLine();
            string[] recipesInLine = recipesLine.Split(splitChars);

            recipes.Add(recipesInLine[0], recipesInLine[1]);
        }

ありがとう

4

3 に答える 3

4
recipesLine.Split(splitChars, StringSplitOptions.RemoveEmptyEntries);

また、一般的なコードは次のように短縮できます

var myDictionary = File.ReadLines(myFileName)
    .Select(l => l.Split(new []{'\t', ' '}, StringSplitOptions.RemoveEmptyEntries))
    .ToDictionary(a => a[0], a => a[1]);
于 2012-05-19T06:31:55.237 に答える
0

エントリは複数の空白文字を使用して区切られ、単一Splitの文字で分割されるため、空のエントリを削除する必要があります。その目的のために、別のオーバーロードがあります。String.Split

string[] recipesInLine = recipesLine.Split(splitChars, 
                                           StringSplitOptions.RemoveEmptyEntries);
于 2012-05-19T06:32:18.857 に答える
0

まず、file.readlines メソッドを使用します。その後、ライン上でlinqを使用できます。http://msdn.microsoft.com/en-us/library/dd383503.aspx

Jon Skeet と Marc Gravell はどちらも、linq を使用してファイルを読み取る良い例をここに示しています。 Read a file line by line in C# .

次に、ToDictionary を使用します - Yuriy の答えは良い解決策です。

于 2012-05-19T06:32:29.070 に答える