Werte eines Array zählen C#?

4 Antworten

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.

PeterKremsner  29.09.2021, 13:03

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.

0
nobytree2  29.09.2021, 13:06
@PeterKremsner

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.

0
PeterKremsner  29.09.2021, 13:12
@nobytree2

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.

1
nobytree2  29.09.2021, 13:54
@PeterKremsner

Oder Du hast es richtig erfasst und ich falsch. Dann ist Sortierung natürlich eine bessere Lösung.

1
Anzahl = 0;
for(i=0;i<array.length;i++)
  if(array[i] == 4)
    Anzahl++;
Woher ich das weiß:Berufserfahrung – Programmierer

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++
Woher ich das weiß:eigene Erfahrung – Hobby und teilweise beruflich