2010-11-03 4 views
1

Ceci est un peu tapageur et j'aurais pu passer à côté de quelque chose de simpleMeilleure structure pour Rechercher des booléens pour un index?

Parfois, j'ai des entiers et je dois être capable de chercher s'ils sont vrais ou faux. J'ai toujours résolu cela en utilisant un dictionnaire < int, bool >, en insérant un vrai et juste en utilisant ContainsKey pour voir si quelque chose est vrai (c'est faux par défaut.)

Mais cela ne semble pas une solution élégante pour insérer un bool qui n'est même pas utilisé :) Quelle structure recommanderiez-vous pour cela? la performance de consultation étant primaire et insertions secondaires (mais importante)

Certains Nice (LINQ) syntaxe pour avoir un tas d'indices et le retour d'articles qui ne figurent pas serait un bonus

Répondre

10

Utilisez un HashSet<int> pour maintenir le « vrai "nombres entiers et utilisez Contains pour rechercher dans la collection. Avec cette approche, vous stockez uniquement les données dont vous avez besoin et vous obtenez la même performance O (1) que vous obtenez actuellement avec le dictionnaire.

+0

qui sonne comme un bon candidat en effet – Homde

+0

Assusing tous « int » ont une valeur, et il n'y a pas un 3ème état de « inconnu » –

1

Vous pouvez utiliser une gamme d'ints.

Définir le tableau [position] = 1 si vrai ou = 0 pour faux.

La recherche se fait en O (1) et l'insertion vous l'avez déjà. Vous déclarez le tableau aussi longtemps que vous le souhaitez.

Ce n'est pas la solution la plus économique. Dans .NET 2.0, vous n'avez pas HashSet.

ou numéro deux options vous pouvez utiliser un BitArray