Question

Y at-il un moyen rapide / simple pour calculer la distribution de fréquence d'une collection .Net utilisant Linq ou autrement?

Par exemple: Une liste de longueur arbitraire contient de nombreuses répétitions. Ce qui est une façon intelligente de marcher la liste et le comptage / répétitions de suivi?

Était-ce utile?

La solution

Le plus simple est d'utiliser un hashmap et soit utiliser la valeur en tant que clé et incrémenter la valeur, ou choisir une taille de seau (seau 1 = 1 - 10, baquet 2 = 11 - 20, etc), et incrémenter chaque godet par la valeur.

Ensuite, vous pouvez passer et déterminer les fréquences.

Autres conseils

La façon la plus simple de trouver les doublons dans une liste est de groupe, comme ceci:

var dups = list.GroupBy(i => i).Where(g => g.Skip(1).Any());

(écriture Skip(1).Any() devrait être plus rapide que (count ()> 1), car il ne faudra traverser plus de deux articles de chaque groupe. Cependant, la différence est probablement négligeable à moins que le recenseur de list est lent)

Le C5 bibliothèque collections génériques a une implémentation HashBag qui accepte les doublons en comptant. Le pseudo-code suivant vous obtenez ce que vous cherchez:

var hash = new HashBag();
hash.AddAll(list);
var mults = hash.ItemMultiplicities();

(où K est le type des éléments dans votre liste) mults contiendra alors une IDictionary<K,int> où l'élément de liste est la clé et la multiplicité est la valeur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top