1

私は自分の状況を説明するのに苦労しているので、私の投稿は少し長くなるかもしれません.

文字列内の特定のキーを検索したい。文字列はテキスト ファイルの行であり、ファイルが行ごとに読み取られるときに比較が行われます。

とりわけ、プロパティ NUMBER および TYPE を持つクラスがあります。それは行ストリングで検索されるキーです。

簡単な解決策は、クラス インスタンスをリストに格納し、そのリストを各行ごとに実行して、行の文字列に現在のリスト エントリのキーが含まれているかどうかを確認することです。

ただし、この実装のパフォーマンスは最悪です。平均すると、プログラムはすべての行でリスト全体をループするからです。これは、リスト内のすべてのキーがファイル内で最大 1 回出現するためです。そのため、キーが含まれていない行がたくさんあります。

皆さんが私が説明しようとしていることを理解し、考えを理解してくれることを願っています。

オブジェクトの例:

O1:
  ID - 1
  NR - 1587
  TYPE - COMPUTER

O2:
  ID - 2
  NR - 5487
  TYPE - TV

text file lines:
  bla bla \t 8745 RADIO
  fsdakfjd9 9094km d9943
  dkjd894 4003p \t 5487 TV
  sdj99  43s39 kljljkljfsd 
  ...

行 3 で、プログラムは一致を見つけ、行の内容と共に ID 2 を保存する必要があります。

ご意見ありがとうございます...トビー

4

2 に答える 2

1

ファイル内の文字列の検索は集中的に行われるため、理想的には、これを 1 回だけ実行する必要があります。クラス参照をディクショナリまたはハッシュテーブルに格納すると理想的だと思います。

次に、次のようなことができます

var myDictionary = new Dictionary<string, ObjectType>();
while(string line = reader.ReadLine())
{
    // Parse the possible key out of the line
    if (myDictionary.ContainsKey(keyFromLine) doSomething(line, myDictionary[keyFromLine]);
}

void doSomething(string line, ObjectType instance)
{
  // Unwrap the line and store appropriate values
}
于 2012-05-15T07:40:35.287 に答える
0

文字列内での分割、カウントは、本質的にリソースと時間のかかる作業です。解析と検索が必要です。すべての文字列をループして保存し、 を使用して検索する必要がありDictionary<key, value>ます。ループを最小限にするようにしてください。それを達成する方法は、すべての行でプログラムを実行し、最初に保存することです。すべての検索で行をスキャンしないでください。

于 2012-05-15T07:31:04.010 に答える