Laden...

Filtern mit dem Black- Whitelist Verfahren

Erstellt von jan223 vor 16 Jahren Letzter Beitrag vor 13 Jahren 4.780 Views
jan223 Themenstarter:in
460 Beiträge seit 2004
vor 16 Jahren
Filtern mit dem Black- Whitelist Verfahren

Beschreibung:

Mit dieser Klasse können Listen mit Hilfe der Black and Whitelist gefiltert werden.

Dank IList können z.B. List<String> Objekte oder Arrays übergeben werden.
Die Listenelemente müssen sich als Key für ein Dictionary eignen, das ist bei String immer der Fall.

Danke an herbivore für das das Feintuning.

using System.Collections.Generic;

namespace Filter
{
    internal class BlackWhite<T>
    {
        private Dictionary<T, bool> black = new Dictionary<T, bool>();
        private Dictionary<T, bool> white = new Dictionary<T, bool>();

        public BlackWhite(IList<T> black, IList<T> white)
        {
            foreach (T t in black) {
               this.black [t] = true;
            }
            foreach (T t in white) {
               this.white [t] = true;
            }
        }

        public List<T> GetGoodList(IList<T> inputList)
        {
            List<T> goodList = new List<T>();

            foreach (T t in inputList)
            {
                if (white.ContainsKey(t) || !black.ContainsKey(t)) {
                    goodList.Add(t);
                }
            }
            return goodList;
        }
    }
}

Schlagwörter: black and white, blacklist, whitelist, Dictionary, Generic

Quelle: .NET-Snippets

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

eine einfache Filterung basierend auf einer Blacklist kann auch mit folgender Erweiterungsmethode bewerkstelligt werden:


public static IEnumerable<TSource> FilterWithBlacklist<TBlackList, TSource>(
	this IEnumerable<TSource> source,
	IEnumerable<TBlackList> blackList,
	Func<TSource, TBlackList> comparisonElementSelctor)
	where TBlackList : IEquatable<TBlackList>
{
	HashSet<TBlackList> hs = new HashSet<TBlackList>(blackList);

	return source
		.Where(i => !hs.Contains(comparisonElementSelctor(i)));
}

Verwendung:


var passed = testList
	.FilterWithBlacklist(blackList, i => i.ID)
	.ToList();

Das Snippet stammt aus Problem mit Linq: Except

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"