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
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!"