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 J'ai fait ce qui suit, mais ne savez pas comment le mettre dans le forach / Si la déclaration ... p> [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>
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")
}
5 Réponses :
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: p>
Vous pouvez conserver un dictionnaire lorsque le code> d'éléments trouvés ainsi que leurs comptages associés. Dans l'exemple ci-dessous,
dict [d] code> fait référence à un élément par sa valeur. Par exemple,
d = 4 code>.
foreach code> boucle se termine que vous aurez une entrée par valeur unique dans
dict code>. Vous pouvez obtenir le nombre de chaque élément en accédant à
dict [d] code>, où
d code> est une valeur entière de votre liste d'origine. P> p>
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() });
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]++; }
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 B> à 5.)
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(); }
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 code>, en formater comme une chaîne code>, puis le reproche à un
int code>? Pourquoi pas seulement utiliser
intergernumrarrays [i] code> au lieu de
int.parse (intergernumberrays [i] .tostring ()) code>?
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 code> 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 a >