0

我有一个文本文件,我需要将所有偶数行放入 Dictionary Key 并将所有偶数行放入 Dictionary Value。我的问题的最佳解决方案是什么?

int count_lines = 1;
Dictionary<string, string> stroka = new Dictionary<string, string>();

foreach (string line in ReadLineFromFile(readFile))
{
    if (count_lines % 2 == 0)
    {
        stroka.Add Value
    }
    else
    { 
       stroka.Add Key
    }

    count_lines++;
}
4

4 回答 4

8

尝试这个:

var res = File
    .ReadLines(pathToFile)
    .Select((v, i) => new {Index = i, Value = v})
    .GroupBy(p => p.Index / 2)
    .ToDictionary(g => g.First().Value, g => g.Last().Value);

这个想法是将所有行成对分组。每个组将恰好有两个项目 - 键作为第一个项目,值作为第二个项目。

ideone 上的演示

于 2013-06-02T17:42:21.803 回答
2

你可能想要这样做:

var array = File.ReadAllLines(filename);
for(var i = 0; i < array.Length; i += 2)
{
    stroka.Add(array[i + 1], array[i]);
}

这将分两步读取文件,而不是单独读取每一行。

我想您想使用这些对:(2,1), (4,3), ... 。如果没有,请更改此代码以满足您的需要。

于 2013-06-02T17:40:26.037 回答
2

您可以逐行阅读并添加到字典

public void TextFileToDictionary()
{
    Dictionary<string, string> d = new Dictionary<string, string>();

    using (var sr = new StreamReader("txttodictionary.txt"))
    {
        string line = null;

        // while it reads a key
        while ((line = sr.ReadLine()) != null)
        {
            // add the key and whatever it 
            // can read next as the value
            d.Add(line, sr.ReadLine());
        }
    }
}

这样你会得到一个字典,如果你有奇数行,最后一个条目将有一个空值。

于 2013-06-02T18:06:33.580 回答
0
  String fileName = @"c:\MyFile.txt";
  Dictionary<string, string> stroka = new Dictionary<string, string>();

  using (TextReader reader = new StreamReader(fileName)) {
    String key = null;
    Boolean isValue = false;

    while (reader.Peek() >= 0) {
      if (isValue)
        stroka.Add(key, reader.ReadLine());
      else
        key = reader.ReadLine();

      isValue = !isValue;
    }
  }
于 2013-06-02T17:45:02.783 回答