Werte eines Array zählen C#?
Hallo erstmal,
ich sitze grade bei einem größeren Programm und eine kleine Aufgabe ist es die gleichvorkommenden Werte in einem Array zu zählen. zB wie oft die 4 in einem Array vorkommt. Ich hoffe ihr könnt mir helfen.
MfG
4 Antworten
Wie alle hier sagen: for - schleife usw. brauchst du nicht.
Du kannst einfach die FindAll methode benutzen und dann zählst du dort die gefundenen Elemente aus mit count.
https://docs.microsoft.com/de-de/dotnet/api/system.collections.generic.list-1.findall?view=net-5.0
Anzahl = 0;
for(i=0;i<array.length;i++)
if(array[i] == 4)
Anzahl++;
Willst du die Vorkommnisse aller Elemente zählen, könntest du ein Dictionary verwenden.
https://docs.microsoft.com/de-de/dotnet/api/system.collections.generic.dictionary-2?view=net-5.0
Folgender Code ist ungetestet:
int i;
Dictionary<int, int> dic = new Dictionary<int, int>();
for(i=0;i<arr.length;i++)
if(dic.ContainsKey(arr[i]))
dic[arr[i]]++
else
dic.Add(arr[i], 1);
Du iterierst von 0 bis zum letzten Index in deinem Array und prüfst, ob der Inhalt == 4 ist. Wenn ja, inkrementierst du einen Zähler.
das glaube ich nicht, denn Sortieren hat auch in den besten Fällen eine Laufzeitkomplexität von O(n), bei Vergleichsnotwendigkeit O(n log n).
Wenn man jetzt ein O(n)-Verfahren nimmt wie bspw. Count-Sort, dann werden wir wohl ca. 3-5*n Zuweisungen haben - und das dürfte wohl mehr sein als n-Vergleiche und max n mal Zuweisungen im Zähler.
Wie ich geschrieben habe, habe ich die Frage und Antwort falsch aufgefasst.
Ich dachte die Frage sei die Suche nach der Zahl von Mehrfacheinträgen im Array und die Antwort hätte ich so aufgefasst dass man eben für jede Zahl von 1 bis n egal ob diese Zahl vorkommt extra in dem Array zählt.
Also sagen wir zB ein Array enthält Zahlen von 0 bis 9 und das Array hat die Form:
[0,0,1,5,6,7,7,7,7,9,8,0,2,5,3]
Dann hätte ich die Lösung verstand als:
for(int needle = 0; needle <= 9; needle++)
for(int i = 0; i < Array.Count; i++)
if(Array[i] == needle) Needle wurde einmal mehr gefunden. Zähler für diese Zahl inkrementieren
Das ganze wäre einfach ineffizient weil man in dem Fall 10 mal übers gesamte Array iteriert und wenn man im Array die Zahlen 0 bis 100 zulässt würde man sogar 100 mal übers gesamte Array iterieren.
Oder Du hast es richtig erfasst und ich falsch. Dann ist Sortierung natürlich eine bessere Lösung.
als Beispiel, sei MyArr das Array und specValue der Abgleichwert
int counter=0;
for(int i=0;i<MyArr.length;++i)
if(MyArr[i]==specValue)counter++
Ich glaube fast das hier Sortieren und das anschließende Auswerten schneller ist, aber wenns nicht auf Geschwindigkeit ankommt kann mans so machen ja.
Edit: Ich glaube ich habe die Frage falsch aufgefasst. Ich dachte er will alle Werte die Mehrfach vorkommen Zählen. Wenn er nur die Anzahl eines bestimmten Wertes zählen will passts so.