0

別のテキスト ファイルからテキストをメモリにロードしようとしています。それらはすべて単語であり、それぞれのテキスト ファイル (words3.txt、words4.txt など) で単語の長さによってすべてグループ化されます。

私はファイルを操作するために使用していますが、構文のために、ループStreamReader内で実行すると、どのファイルを操作するかを反復できると確信しています。12 の異なるステートメントforが必要な理由がわかりません。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# では機能しません。この問題を解決する最善の方法は何ですか? 配列をより大きな配列に入れて、何らかの方法で反復処理できますか? テキスト ファイルでは、単語は個々の行に保存されず、1 つのスペースで区切られます。時間を節約するために、ユーザーの単語が「辞書」に含まれているかどうかを確認するときは、適切な文字数の単語を格納する配列内で一致するものだけを検索したいと考えています。

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 に答える