6
votes

Comment afficher le nombre de fois qu'un élément de tableau apparaît

Je suis nouveau à C # et j'espère pouvoir obtenir de l'aide sur ce sujet. J'ai un tableau avec des éléments et j'ai besoin d'afficher combien de fois chaque élément apparaît.

Par exemple, dans [1, 2, 3, 4, 4, 4, 3] code>, 1 code> apparaît une fois, 4 code> apparaît trois fois, et ainsi de suite. P>

J'ai fait ce qui suit, mais ne savez pas comment le mettre dans le forach / Si la déclaration ... p>

int[] List = new int[]{1,2,3,4,5,4,4,3};
foreach(int d in List)
{
    if("here I want to check for the elements")
}


4 commentaires

S'il s'agit de devoirs, veuillez l'étiqueter comme tel.


Nope Ce n'est pas, je suis juste d'apprendre et d'essayer de le faire :-)


Essayez d'utiliser un dictionnaire où chaque touche représente une entrée unique et la valeur représente un compte. Chaque fois que vous appuyez sur une clé existante, incrémentez sa valeur par 1.


Dupliqué possible de C #: une méthode pour compter les occurrences dans une liste


5 Réponses :


12
votes

Vous pouvez gérer cette via énumérable.groupby . Je recommande de regarder le C # LINQ Échantillons section sur le nombre et la GroupeBy pour guidage.

in Votre cas peut être: xxx


0 commentaires

7
votes

Vous pouvez conserver un dictionnaire d'éléments trouvés ainsi que leurs comptages associés. Dans l'exemple ci-dessous, dict [d] fait référence à un élément par sa valeur. Par exemple, d = 4 . xxx

lorsque le foreach boucle se termine que vous aurez une entrée par valeur unique dans dict . Vous pouvez obtenir le nombre de chaque élément en accédant à dict [d] , où d est une valeur entière de votre liste d'origine.


0 commentaires

1
votes
var list = new int[] { 1, 2, 3, 4, 5, 4, 4, 3 };
var groups = list.GroupBy(i => i).Select(i => new { Number = i.Key, Count = i.Count() });

0 commentaires

3
votes

Les réponses Linq sont bien, mais si vous essayez de le faire vous-même:

int[] numberFound = new int[6];
int[] List = new int[] { 1, 2, 3, 4, 5, 4, 4, 3 };
foreach (int d in List)
{
    numberFound[d]++;
}


2 commentaires

Pourquoi avez-vous alloué 6 espaces pour clôturer mais seulement 5?


@Jonh pour que le classement de ce numéro [x] correspondre à x, non à x-1. (Le paragraphe varie de 0 à 5.)



-1
votes

Vide statique privé CalculatunumberofocurencesLeloop ()

{ P>

        int[] intergernumberArrays = { 1, 2, 3, 4, 1, 2, 4, 1, 2, 3, 5, 6, 1, 2, 1, 1, 2 };

        Dictionary<int, int> NumberOccurence = new Dictionary<int, int>();
        for (int i = 0; i < intergernumberArrays.Length; i++)
        {
            if (NumberOccurence.ContainsKey(intergernumberArrays[i]))
            {
                var KeyValue = NumberOccurence.Where(j => j.Key == intergernumberArrays[i]).FirstOrDefault().Value;
                NumberOccurence[intergernumberArrays[i]] = KeyValue + 1;
            }
            else
            {
                NumberOccurence.Add(intergernumberArrays[i], 1);
            }
        }
        foreach (KeyValuePair<int, int> item in NumberOccurence)
        {
            Console.WriteLine(item.Key + " " + item.Value);
        }
        Console.ReadLine();

    }


1 commentaires

C'est le même concept que @ Yuck's Réponse Il y a 4,5 ans, sauf que la solution accède à chaque élément de tableau exactement une fois et celui-ci ITERATES à travers le reste de la matrice à chaque fois qu'une nouvelle valeur est rencontrée. De plus, quel est le but de récupérer un élément de tableau de type int , en formater comme une chaîne , puis le reproche à un int ? Pourquoi pas seulement utiliser intergernumrarrays [i] au lieu de int.parse (intergernumberrays [i] .tostring ()) ?