Doppelt Elemente im Array zählen
Thorsten F.
- javascript
0 Maxx0 Gunnar Bittersmann0 at
0 Killi0 MudGuard
Hi,
eine Frage: Ich habe ein Array mit folgenden Elementen:
Name1, Name2, Name3, Name1, Name2
Jetzt möchte ich folgende Ausgabe:
Name1 = 2
Name2 = 2
Name3 = 1
Wie bekomme ich das hin. Ich habe bereits eine Funktion, die mir die doppelten Einträge entfernt, aber das hilft mir ja nicht wirklich weiter.
Hier die Fkt. um die doppelten Einträge zu entfernen:
var test = new Array();
for( var ii = 0; ii < doppelt.length; ii++ )
{
var found = false;
for( var jj = 0; jj < test.length; jj++ )
{
if( doppelt[ii] == test[jj] )
{
found = true;
break;
}
}
if( found == false )
{
test.push( doppelt[ii] );
}
}
Grüße,
Thorsten F.
Hallo Thorsten,
eine Frage: Ich habe ein Array mit folgenden Elementen:
Name1, Name2, Name3, Name1, Name2Jetzt möchte ich folgende Ausgabe:
Name1 = 2
Name2 = 2
Name3 = 1
Grob: Namen.sort() und eine Schleife die Elem[i] mit Elem[i+1] vergleicht. Den Feinschliff schaffst du self.
Viele Grüße, Jochen
Hallo Thorsten,
eine Frage: Ich habe ein Array mit folgenden Elementen:
Name1, Name2, Name3, Name1, Name2Jetzt möchte ich folgende Ausgabe:
Name1 = 2
Name2 = 2
Name3 = 1Grob: Namen.sort() und eine Schleife die Elem[i] mit Elem[i+1] vergleicht. Den Feinschliff schaffst du self.
Viele Grüße, Jochen
Jo, danke euch beiden. War doch nicht so schwer wie ich dachte. Irgendwie denke ich immer viel zu kompliziert.
Grüße,
Thorsten F.
Hello out there!
eine Frage: Ich habe ein Array mit folgenden Elementen:
Name1, Name2, Name3, Name1, Name2Jetzt möchte ich folgende Ausgabe:
Name1 = 2
Name2 = 2
Name3 = 1
Du machst es dir aber auch schwer. Einfacher hast du es, wenn du das Array zuerst http://de.selfhtml.org/javascript/objekte/array.htm#sort@title=sortierst; Dann musst du in einer einfachen Schleife nur jeweils benachbarte Elemente vergleichen.
Sind beide ungleich, schreibst du das erste Element in dein Ergebnisarray und eine '1' in ein Zählerarray. Sind beide gleich, schreibst du nicht wieder in dein Ergebnisarray, setzst aber den entsprechenden Zähler um 1 hoch.
See ya up the road,
Gunnar
Hallo.
Du machst es dir aber auch schwer. Einfacher hast du es, wenn du das Array zuerst http://de.selfhtml.org/javascript/objekte/array.htm#sort@title=sortierst; Dann musst du in einer einfachen Schleife nur jeweils benachbarte Elemente vergleichen.
Aber wie stelle ich dann die urspüngliche Reihenfolge wieder her, ohne mit diesem Mehraufwand die Ersparnis wieder zunichte zu machen?
MfG, at
Hello out there!
[…] wenn du das Array zuerst http://de.selfhtml.org/javascript/objekte/array.htm#sort@title=sortierst; Dann musst du in einer einfachen Schleife nur jeweils benachbarte Elemente vergleichen.
Aber wie stelle ich dann die urspüngliche Reihenfolge wieder her,
Vorher das Array kopieren: lineare Laufzeit O(n). Sortieren sollte in O(n · log n) möglich sein. Einfache Schleife zum Vergleichen jeweils benachbarter Elemente wieder O(n). Insgesamt also O(n · log n).
Der Algorithmus des OP hat eine doppelte Schleife, also O(n²), ist also zeitaufwändiger.
ohne mit diesem Mehraufwand die Ersparnis wieder zunichte zu machen?
Also von was für einem Mehraufwand sprichst du? ;-)
See ya up the road,
Gunnar
Hallo.
Vorher das Array kopieren: lineare Laufzeit O(n). Sortieren sollte in O(n · log n) möglich sein. Einfache Schleife zum Vergleichen jeweils benachbarter Elemente wieder O(n). Insgesamt also O(n · log n).
Der Algorithmus des OP hat eine doppelte Schleife, also O(n²), ist also zeitaufwändiger.
Danke für die Erläuterung.
MfG, at
Hello out there!
Sortieren sollte in O(n · log n) möglich sein.
Ergänzung dazu: Ich weiß nicht, wie sort() implementiert ist. Möglich, dass ein Sortierverfahren eingesetzt wird, das stabil ist, aber quadratischen Zeitaufwand hat.
Stabilität ist hier aber nicht erforderlich. Wenn’s auf Effizienz ankommt also ggfs. also nicht sort() benutzen, sondern die Sortierung selbst implementieren.
See ya up the road,
Gunnar
Hi,
Wie bekomme ich das hin. Ich habe bereits eine Funktion, die mir die doppelten Einträge entfernt, aber das hilft mir ja nicht wirklich weiter.
Moment, Du hast eine Funktion zum Entfernen doppelter und n-facher records, aber Du kannst die entfernten records nicht zählen?
Warum denn nicht?
Killi
Hi,
eine Frage: Ich habe ein Array mit folgenden Elementen:
Name1, Name2, Name3, Name1, Name2
Jetzt möchte ich folgende Ausgabe:
Name1 = 2
Name2 = 2
Name3 = 1
Leg ein assoziatives Array an.
Lauf durch Dein ursprüngliches Array.
Existiert der aktuelle Wert im assoziativen Array als key noch nicht, lege ihn an mit dem Wert 1, andernfalls erhöhe den Wert um 1.
Für die Ausgabe dann mit foreach durch das assoziative Array durchlaufen und jeweils Key und Value ausgeben.
cu,
Andreas