在For循环中更改变量名称以反映迭代器的值?

时间:2012-11-21 17:46:18

标签: c# for-loop streamreader

我正在尝试从不同的文本文件中将文本加载到内存中。它们都是单词,它们都按照各自文本文件中单词的长度分组(例如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#中起作用。解决这个问题的最佳方法是什么?我可以将数组放入一个更大的数组中并以某种方式迭代它们吗?在文本文件中,单词不存储在单独的行上,它们由单个空格分隔。为了节省时间,当我去查看用户的单词是否包含在我的“词典”中时,我只想在包含具有适当字母数的单词的数组中搜索匹配。

4 个答案:

答案 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];