実装する必要があるかなり複雑なメソッドがあります。できるだけ簡単な方法で説明しようとしていますので、ご容赦ください。
ファイル名を表す文字列のセット A が与えられます。たとえば、「abc」、「def」、および「ghi」としましょう。これらの名前から、それぞれに「関連付けられた」ファイル名のセット B を導き出す必要があります。「def」の場合は「def_123」、「def_456」、「def_789」。「ghi」の場合は「ghi_123」、「ghi_456」、「ghi_789」。できることはこれくらい。ただし、これらの関連付けられたファイル名には、予測できない文字列であるプレフィックスまたはサフィックスが付いている場合があります。そのため、「abc」に関連付けられたファイル名は、実際には「HELLOabc_123WORLD」、「FOOabc_456BAR」、および「999abc_789000」になる可能性があります。(正規表現で言えば、上で書いた関連するファイル名の両側に * を付けるだけです)。つまり、関連付けられたファイル名は次のようになります。
*<original filename><other piece that I know>*
ここで、星は任意の数のランダムな文字を示します (0 の場合もあります)。
それがパズルの最初のピースです。
次に、関連付けられたファイル名のセット (セット B) と比較する文字列の別のセット C が与えられます。(ご参考までに、関連ファイルが特定のディレクトリにあるかどうかを確認しようとしており、そのディレクトリにファイル名のリストがあり、C を設定しています)。セット C 内の特定のファイルに関連するすべてのファイル名が見つかった場合は、セット A からそのファイルをチェックアウトできます。セット A 内の各ファイル名をチェックする必要があります。セット C で見つかった場合、そのファイルをセット A からチェックオフできます。
最後に、セット A からチェックされていないファイル名を返す必要があります (したがって、すべてが見つかった場合は何も返されません)。
このメソッドを実装する方法を考え出すのに苦労しています。次のように、ファイル名をセット A からそのファイル名に関連付けられたすべてのファイル名を含むリストにマップするマップを作成することを考えました。
Key Value
abc *abc_123*, *abc_456*, *abc_789*
def *def_123*, *def_456*, *def_789*
ghi *ghi_123*, *ghi_456*, *ghi_789*
次に、このマップの要素と要素の値をトラバースし、それらをセット C の文字列と比較します。特定のキーの値 (リスト) のすべての要素がセット C にある場合は、マークを付けることができます。その鍵は私のリストから外れています。残っているキーは返却されます。
これはうまくいくように思えますが、それをコードに組み込む実際のメカニズムは、私にとって非常に困難でした。ですから、私の考えを正しい方向に動かすための小さな提案や指針をいただければ幸いです。コードを提供したい場合に備えて、私の実装言語は Java になります。疑似コードも歓迎します。