Question

J'ai une liste blanche d'URL que je utilise, dans un HashSet<string>. Je suis en train de trouver si le url commence par l'un des éléments dans la liste blanche (il doit être ce tour à sens unique).

Edit:. L'exemple précédent était un peu trompeur et avait une faute de frappe - je l'ai déjà une URL de base comme yahoo.com, la liste blanche est juste le chemin

HashSet<string> whiteList = new HashSet<string>();

string path = "/sport/baseball/";
bool validUrl = false;

foreach (string item in whiteList)
{
    if (path.StartsWith(item))
    {
        validUrl = true;
        break;
    }
}

Y at-il une façon plus élégante de faire cette recherche avec LINQ (objets)? La liste n'est pas énorme si les performances ne sont pas un problème.

Était-ce utile?

La solution

bool validUrl = whiteList.Any(item => linkUrl.StartsWith(item));

Par ailleurs, en général, les tables de hachage ne sont pas bonnes structures de données pour ce genre de problèmes (où vous n'avez pas la clé et sont correspondant à la clé basée sur une fonction) que vous devrez énumérer l'ensemble la table tout le temps. Vous pouvez utiliser un simple List<string> pour contenir les éléments à la place et vous obtiendrez de meilleures performances.

Autres conseils

La question est ici à la recherche. Avez-vous une certaine régularité dans la liste blanche? i.e. ce que ce sera toujours un domaine que vous êtes après, pas neccessarily les pages ou dans un sous-domaine spécifique?

Si vous pouviez donc utiliser un string.split pour saisir la première partie de l'URL de votre chaîne, puis utilisez la méthode .Contains () de votre HashSet pour obtenir l'élément. Cela supprimerait la commande qui est exécutée une fois pour chaque élément dans la liste, et une chaîne chère string.StartsWith () comparer, et le remplacer par un hors string.split et un O (1) recherche de votre HashSet.

HashSet<string> whiteList = new HashSet<string>();
//add items

string urlStartsWith = "http://www.yahoo.com";
bool validURL = whiteList.Contains(url);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top