2010-11-18 10 views

Répondre

4
int[] array = new[] { 1, 1, 2, 3, 3, 5 }; 
var counts = array.GroupBy(x => x) 
        .Select(g => new { Value = g.Key, Count = g.Count() }); 
foreach(var count in counts) { 
    Console.WriteLine("[{0}] => {1}", count.Value, count.Count); 
} 

Vous pouvez obtenir un Dictionary<int, int> comme ceci:

int[] array = new[] { 1, 1, 2, 3, 3, 5 }; 
var counts = array.GroupBy(x => x) 
        .ToDictionary(g => g.Key, g => g.Count()); 
+0

Ce n'est pas une réponse à une seule fonction - ça n'existe pas - mais c'est mieux que la boucle que je préparais. +1 – Randolpho

+0

merci, comment puis-je trouver le nombre maximum count.count dans ce tableau résultats? –

+0

var maxValeur = counts.Max (g => g.Value); – mellamokb

1

Modifier

Désolé, je vois maintenant que ma réponse précédente n'a pas été correcte. Vous voulez compter chaque type de valeur unique.

Vous pouvez utiliser un dictionnaire pour stocker les types de valeurs:

object[] myArray = { 1, 1, 2, 3, 3, 5 }; 
Dictionary<object, int> valueCount = new Dictionary<object, int>(); 
foreach (object obj in myArray) 
{ 
    if (valueCount.ContainsKey(obj)) 
     valueCount[obj]++; 
    else 
     valueCount[obj] = 1; 
} 
0

Si vous voulez pouvoir compter quelque chose en plus des ints essayer ceci

public static Dictionary<dynamic, int> Count(dynamic[] array) 
    { 

    Dictionary<dynamic, int> counts = new Dictionary<dynamic, int>(); 

    foreach(var item in array) { 

    if (!counts.ContainsKey(item)) { 
    counts.Add(item, 1); 
    } else { 
    counts[item]++; 
    } 


    } 

    return counts;  
    }