2017-08-17 1 views
1

Je désérialise un fichier dans une table de hachage dont les clés contiennent des chemins de fichier tels que "c:\test\file.txt" et "c:\store\etc.txt" par exemple. Je dois ensuite vérifier si une partie d'un chemin "c:\" ou "c:\test" est incluse dans l'une de ces clés de hachage. Donc, si "C:\test\file.txt" contient "C:\test", retour true.Vérification de la présence d'une chaîne de caractères dans une partie de la table de hachage C#

Je peux le faire tout simplement une liste ci-dessous (lstLoadedNodes la liste) qui fonctionne très bien:

if (lstLoadedNodes.Any(s => s.Contains(e.Node.Path))) 

Je ne peux pas trouver un moyen de le faire avec une table de hachage sans clé entière besoin d'être apparié.

Lorsque je tente cela avec un Hashtable (checkedNodes est mon Hashtable), il ne retourne que true si la chaîne correspond exactement:

if (checkedNodes.ContainsKey(e.Node.Path)) 

Comment puis-je chercher une partie du hashtable.key? J'espère que cela a du sens!

Je sais que je peux d'abord passer toutes les valeurs à une liste puis exécuter le "si contient.tout" qui est ce que je fais actuellement mais cela semble inutile alors je préfère vérifier la hashtable.

Merci d'avance.

+0

Vous pouvez implémenter votre propre structure de données. Par exemple. basé sur un arbre (chemin divisé par '/') où les enfants sont détenus dans une table de hachage. – CShark

+1

'if (lstLoadedNodes.Any (s => s.Contains (e.Node.Path)))' fonctionnera pour un 'HashSet'. – mjwills

+0

mjwills - cela ne fonctionne pas pour moi pour une raison quelconque, les erreurs ".Any". – acurachris

Répondre

1

Je pense que vous cherchez quelque chose comme:

checkedNodes.Keys.Cast<string>().Any(k => k.Contains(e.Node.Path)); 
+0

Cela fonctionne très bien, merci! – acurachris

+0

@acurachris Content d'ici que ~:) – Student222