1

私はソフトウェアを作らなければなりませんが、それは本当に複雑です。詳細はたくさんありますが、必要なものの簡単な例をここに書きます。

  1. ユーザーはいくつかの単語を入力します。
  2. ユーザーがフォルダを入力
  3. プログラムの仕事:

フォルダは常に変更されます。そのフォルダーには、次のようなファイルがあります。

File1.txt File2.txt File3.txt File4.txt

ファイル内 (すべて同じ構造)。それは file1.txt のようなものです:

word1 word2 word.. wordn

おそらく、File1.txt には 100 個の単語があり、File2.txt には 10 個しかありません。

ユーザーが入力する単語が 10 の場合。ソフトウェアは、できるだけ多くのファイルを調べて、それらから 10 単語を取得する必要があります。

言い忘れましたが、10 語は各行の先頭からではありません。

file1.txt の場合:

単語1 単語2 単語3 単語4 単語5

私はそれからword3を取り出したいと思います。または word2 は問題ではありませんが、ランダムにする必要があります。

アイデアは、プロセスをできるだけ早くランダム化することです。この場合、File1.txt から 1 語、File4.txt から 1 語、File2.txt から 2 語、File3.txt から 1 語を取得できれば素晴らしいと思います。

このようなものをランダム化してこのようにするにはどうすればよいですか?

ありがとう!

4

2 に答える 2

3

このようなもの:

必要なファイルを読み取ります。各ファイルから単語をコピーして配列に分割します。その配列から n 個のランダムな単語を選択します。

これに取り組むにはおそらく多くの方法がありますが、上記は非常に簡単です。私が挙げたものの各部分を調査すると、問題全体を完了することができるはずです。問題が大きすぎると思われる場合。分割統治!

于 2012-06-17T11:43:50.827 に答える
1

あなたが望むことを行うための非常に良い方法は次のとおりです。これは、ソフトウェアをすばやく起動して実行するための一般的な方法です。

できるだけ早く、アプリケーションに必要なインターフェイスを確認してください (つまり、アプリケーションの境界は何か、アプリケーションに何が入り、何がアプリケーションから出て行くか)。

次に、一部のインターフェースを抽象化する場合は、そのインターフェースのランダムな実装を提供します。これは、単に期待どおりのことを行います。(たとえば、データのソースが必要な場合は、ReadAll メソッドを持つ ISomeDataSource を使用できます。また、Data を返す ReadAll を持つ RandomSomeDataSource を非常に高速に提供できます。

そうすれば、その複雑な問題を非常に迅速に把握でき、柔軟に変更でき、何が得られるかを確認できます。「単純なパス」が機能するとすぐに、これらすべてのインターフェースを実装できます。これにより、テスト可能になる可能性が高くなり、製品所有者がアプリケーション全体を非常に迅速に検査できるようになります。彼は自分が得るものを見ます。(本当によく働きます)

コンクリート

InputWords 用のインターフェースを用意して、それを呼び出しましょう

interface IWordInput
{
    void ReadWords(string[] words);
}

およびフォルダー入力

interface IFolderInput
{ 
    void InputFolder(string path);
}

とランダムな単語ソース

interface IWordSource
{
    void ReadAllWords(string path, out string[] words);
    string GetRandomWord(string[] words);
}

そしてここに来ます:

 class RandomWordSource : IWordSource
 {
     public ReadAllWords(string path, out string[] words)
     {
         // somewhat like
         words = new[] string;
         words.Add("word1");
         words.Add("word2);

         // and so on
     }

     public string GetRandomWord(string[] words)
     {
          // sic
          return words.FirstOrDefault();
     }
于 2012-06-17T11:40:10.893 に答える