1

次のキーを含むキーが文字列であるマップがあります。

"おはようございます"

"今日は元気ですか"

「この日はブティフルです」

"前もって感謝します"

特定の単語を 2 つ含むキーがあるかどうかを知りたいです。もちろん、複数の一致するキーが存在する可能性がありますが、ブール値の答え (真または偽) があるかどうかを知る必要があります。

上記の場合、「朝」と「あなた」という単語については true になり、「are」と「butiful」については false になります。

マップを反復せずにそのようなことを確認する方法はありますか?

ありがとう。

4

2 に答える 2

2

簡単な答え: そのような方法はありません。

マップにはいくつかの種類があります。

HashMap は、文字列の内容をほとんどスクランブルするハッシュ アルゴリズムに基づいています。これは意図的に行われており、ハッシュ キーから文字列の内容を確実に取得する方法はありません。

SortedMap を使用すると、並べ替えられた値をすばやく見つけることができますが、それらの文字列内の単語を見つけることはできません。

必要なことを行う唯一の方法は、キーセット全体を反復処理することです。

または、一連の文字列のインデックスを作成するテキスト検索アルゴリズムを使用して、検索を高速化することもできます。

これを考慮してください: http://lucene.apache.org/core/

もう 1 つのアイデアは、ニーズに合った独自のハッシュ アルゴリズムまたはマップの実装を考え出すことです。これは、見た目よりも複雑になる可能性があります...

于 2013-02-12T06:09:24.733 に答える