Je ne suis pas dans les solutions LINQ,
J'utilise predicat simple pour déterminer si la clé doit être supprimée, Par exemple si le dictionnaire est construit comme Dictionary<int, int>
, Alors, comment dois-je supprimer toutes les entrées avec des données négatives
Je préfère utiliser le même dictionnaire, pas pour en créer un nouveau, Je n'ai pas de problèmes de préformance
Y at-il un moyen de le faire, sans utiliser LINQ, mais en utilisant des expressions Lambda?
Je ne voulais pas de solutions dans LINQ parce que personne ne les utilisait dans mon projet, je ne voulais pas être le premier .., mais comme j'ai vu les solutions LINQ mieux paraître, je les utiliserai ..
En utilisant simplement l'expression lambda:
foreach (var i in myDict.Where(d => (d.Value < 0 || d.key <0)).ToList() )
{
myDict.Remove(i.Key);
}
var toRemove = dict.Keys.Where(predicate).ToArray();
foreach (var key in toRemove) {
dict.Remove(key);
}
Bien si vous ajoutez
namespace MMExtensions
{
public static class DictionaryExtensions
{
public delegate bool Predicate<TKey, TValue>(KeyValuePair<TKey, TValue> d);
[MethodImpl(MethodImplOptions.Synchronized)]
public static void Filter<TKey, TValue>(
this Dictionary<TKey, TValue> hashtable, Predicate<TKey, TValue> p)
{
foreach (KeyValuePair<TKey, TValue> value in hashtable.ToList().Where(value => !p(value)))
hashtable.Remove(value.Key);
}
}
}
Et vous avez eu un ensemble de données comme dictionnaire:
Dictionary<string, int> d =
new Dictionary<string, int> {{"v", -3}, {"val1", 1}, {"val2", 2}};
Ensuite, vous pouvez utiliser:
d.Filter(delegate(KeyValuePair<string, int> kv) { return kv.Value >= 0; });
d.Filter(kv => kv.Value >= 0);// or as lambda
Voulez-vous supprimer les éléments de ce dictionnaire ou souhaitez-vous utiliser un nouveau dictionnaire sans ces éléments?
var d = new Dictionary<int,int>();
var newDict = d.Where(entry => entry.Value >= 0).ToDictionary(entry => entry.Key, entry => entry.Value);
Le plus facile:
Dictionary<long, long> dict...
Dictionary<long, long> result = dict.Were(x => x.Value >= 0).ToDictionary(x => x.Key, x => x.Value);
Ou alors, passez en boucle dans l'ordre inverse et supprimez les invalides.