タイトルが意味をなすことを願っています。コレクションのサブコレクション(ブール値ではないLINQ)でのブールANDストリング検索の実行
は、私が検索し、すべてが少なくとも一度Item
秒のSubItems
のいずれかで表示される必要がありますkeywords
のセットに基づいてのサブセットを、選択したいitems
のセットを持っています。私はこれがLINQを使って簡単に達成できると信じていますが、私はこのプロジェクトに.NET 2.0を使用しています。
AllBitsAreSet
が実装されていると仮定すると、以下のコードは私がやりたいことをかなり達成するはずですが、私はこれをやるより簡単な方法がないのでしょうか?
BitArray
のすべてのビットが設定されているかどうかを確認する良い方法はないようですので、それらをすべてループしています(私に教えてください!)、私は "代替案。以下のコードが私が作業しているデータセットでは遅すぎるとは思えないので、必ずしもより効率的なCPUであるとは限りません。
public List<Item> Search(Item[] items, List<string> keywords)
{
List<Item> results = new List<Item>();
BitArray flags = new BitArray(keywords.Count);
foreach (Item item in items)
{
flags.SetAll(false);
foreach (SubItem subItem in item.SubItems)
{
for (int i = 0; i < keywords.Count; i++)
{
if (subItem.StringValue.IndexOf(keywords[i]) >= 0)
flags[i] = true;
}
}
if (AllBitsAreSet(flags)) results.Add(item);
}
return results;
}
ごとに
.Contains()
に==
を変えましたか?内部ループ(int i = 0の場合)は私の問題のように見えます。 – shahkalpeshサンプル入力/期待出力を提供する方が良いでしょう。 – shahkalpesh