J'espère que le titre a du sens.Effectuer une recherche booléenne AND string sur les sous-collections d'une collection (non-LINQ)
J'ai un ensemble de items
que je veux rechercher et sélectionner un sous-ensemble, sur la base d'un ensemble de keywords
qui doit apparaître tout au moins une fois dans l'un des SubItems
des Item
s. Je crois que cela pourrait facilement être réalisé en utilisant LINQ, mais j'utilise .NET 2.0 pour ce projet.
Le code ci-dessous devrait réaliser à peu près ce que je veux faire, en supposant que AllBitsAreSet
est mis en œuvre, mais je me demande s'il me manque une alternative, une façon plus simple de le faire?
Puisqu'il ne semble pas y avoir un bon moyen de vérifier si tous les bits d'un BitArray
sont définis, en plus de les boucler tous (s'il vous plaît dites-moi s'il y en a!), Je m'interroge sur "plus agréable" alternatives. Pas nécessairement plus efficace CPU, car je doute que le code ci-dessous sera trop lent pour les jeux de données avec lesquels je travaille, mais ceux avec moins de code.
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;
}
Combien de sous-éléments d'un élément peut avoir? La boucle interne (pour int i = 0) me semble être un problème. – shahkalpesh
Il vaudra mieux que vous fournissiez une entrée d'échantillon/une sortie attendue. – shahkalpesh