我正在尝试从不同的文本文件中将文本加载到内存中。它们都是单词,它们都按照各自文本文件中单词的长度分组(例如words3.txt,words4.txt ...)
我正在使用StreamReader
来处理这些文件,并且由于语法的原因,我相当肯定如果我在for
循环中执行它,我可以迭代它正在使用哪个文件。我不明白为什么我应该有12个不同的using
陈述。
String[] words3 = new String[2000];
for (int i = 0; i < 12; i++)
{
using (StreamReader sr = new StreamReader(path + "words" + (i+3) + ".txt"))
{
String strTemp = sr.ReadLine();
words3 = strTemp.Split(' '); //My current logic fails here
}
}
我想迭代我不同的单词数组(words3,words4 ... words15),但很自然地我遇到了一个问题,我正在将这些数据存储在其中。它保持不变,所以我只是简单地说被覆盖12次。在VB.NET
我可以将迭代器变量连接到数组名称,就像这样(或者类似于此的东西):
words & (i+3) = strTemp.Split(' ');
这显然不会像我描述的那样在C#中起作用。解决这个问题的最佳方法是什么?我可以将数组放入一个更大的数组中并以某种方式迭代它们吗?在文本文件中,单词不存储在单独的行上,它们由单个空格分隔。为了节省时间,当我去查看用户的单词是否包含在我的“词典”中时,我只想在包含具有适当字母数的单词的数组中搜索匹配。
答案 0 :(得分:5)
为什么不创建一个List
数组?
List<string[]> stringList = new List<string[]>();
for (int i = 0; i < 12; i++)
{
using (StreamReader sr = new StreamReader(path + "words" + (i+3) + ".txt"))
{
String strTemp = sr.ReadLine();
stringList.Add(strTemp.Split(' '));
}
}
答案 1 :(得分:5)
使用字典之类的东西:
Dictionary<int,string[]> word_dict = new Dictionary<int,string[]>();
for (int i = 0; i < 12; i++)
{
using (StreamReader sr = new StreamReader(path + "words" + (i+3) + ".txt"))
{
String strTemp = sr.ReadLine();
string[] words = strTemp.Split(' ');
word_dict.Add(i + 3,words);
}
}
然后把话说回来:
string[] words3 = word_dict[3];
答案 2 :(得分:2)
或者,数组(锯齿状数组)将起作用:
string[][] words = new string[12][];
for (int i = 0; i < 12; i++)
{
using (StreamReader sr = File.OpenText(path + "words" + (i + 3) + ".txt"))
{
string strTemp = sr.ReadLine();
words[i] = strTemp.Split(' ');
}
}
答案 3 :(得分:0)
我会使用<int, string[]>
类型的字典。键是字长,值是字符串数组。像这样排序:
var wordDict = new Dictionary<int, String[]>();
for (int i = 0; i < 12; i++)
{
using (StreamReader sr = new StreamReader(path + "words" + (i+3) + ".txt"))
{
String strTemp = sr.ReadLine();
String[] words = new String[2000];
words = strTemp.Split(' ');
wordDict[i] = words;
}
}
通过使用字典,您可以使用单词长度轻松访问正确的字符串数组(而不是在使用锯齿状数组或列表时必须知道索引)。
var words3 = wordDict[3];
var words4 = wordDict[4];