0

我正在尝试将文本从不同的文本文件加载到内存中。它们都是单词,在各自的文本文件中都是按单词长度分组的(例如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

4 回答 4

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(' '));
        }
}
于 2012-11-21T17:48:57.970 回答
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];
于 2012-11-21T17:49:35.910 回答
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(' ');
   }
}
于 2012-11-21T17:51:34.557 回答
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];
于 2012-11-21T17:52:02.843 回答