我有一个文本文件,我需要将所有偶数行放到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++;
}
答案 0 :(得分:7)
试试这个:
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);
我们的想法是成对分组所有行。每个组将只有两个项目 - 作为第一项的键,以及作为第二项的值。
答案 1 :(得分: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)
,....如果没有,请更改此代码以满足您的需求。
答案 2 :(得分:1)
您可以逐行阅读并添加到词典
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());
}
}
}
通过这种方式,您将获得一个字典,如果您有奇数行,则最后一个条目将具有空值。
答案 3 :(得分: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;
}
}