Duplikate in einem Array finden
bernhard.s
- javascript
0 Axel Richter0 Christian Kruse0 Axel Richter0 Cyx23
hi,
wie kann ich Duplikate in einem Array finde?
Ich habe folgendes versuch:
var aus="";
var blnDup="";
var strMatch="";
for (i = 1; i < boxSammeln.length; i++){
strMatch = boxSammeln[i];
for (j = 1; j < boxSammeln.length; j++){
blnDup = boxSammeln[i].match("/"+strMatch+"/");
if (!blnDup){
aus += i+", "+strMatch+" \n";
}
}
}
alert(aus);
leider bekomme ich den gewünschte Ergebnis nicht :-(
Ich habe auch folgendes versucht
for(var i=1; i< boxSammeln.length; i++){
for(var j=1; j< boxSammeln.length; j++){
if(boxSammeln[i] == boxSammeln[j]){
aus += boxSammeln[i]+", +boxSammeln[j]+"\n";
break;
}
}
}
ist leider auch falsch :-(
Kennt eine eine bessere Methode um Duplikate in einem Array zu finden.
Danke im Voraus.
grüße
Hallo,
wie kann ich Duplikate in einem Array finde?
<script type="text/javascript">
<!--
var namen = new Array("A", "B", "C", "E", "C", "D", "E", "C", "B");
//findet alle Doppelungen aller Elemente (relativ selbsterklärend)
var aus ="";
for (var i = 0; i<namen.length; i++) {
for (var j = i+1; j<namen.length; j++) {
if (namen[i] == namen[j]) {
aus +="doppelt: namen[" + i + "] = " + namen[i] + " und namen[" + j + "] = " + namen[j] + "\n";
}
}
}
alert(aus);
//findet je eine Doppelung von Elementen und deren Nachfolger
var aus ="";
for (var i = 0; i<namen.length; i++) {
for (var j = i+1; j<namen.length&&namen[i]!=namen[j]; j++);
if (j<namen.length) { //nicht bis zum Ende durchgelaufen => eine Doppelung
aus +="doppelt: namen[" + i + "] = " + namen[i] + " und namen[" + j + "] = " + namen[j] + "\n";
}
}
alert(aus);
//-->
</script>
viele Grüße
Axel
Hallo bernhard,
wie kann ich Duplikate in einem Array finde?
Relativ performanter Algorithmus (Aufwand ist n):
var namen = Array("A","B","C","D","E","E","A");
var unique = Array();
for(i=0;i<namen.length;i++) {
unique[namen[i]]++;
}
for(name in unique) {
alert(name);
}
Gruesse,
CK
Hallo Christian,
wie kann ich Duplikate in einem Array finde?
Relativ performanter Algorithmus (Aufwand ist n):
var namen = Array("A","B","C","D","E","E","A");
var unique = Array();for(i=0;i<namen.length;i++) {
unique[namen[i]]++;
}for(name in unique) {
alert(name);
}
Das ermittelt aber noch nicht, _welche_ Elemente mehrfach vorkommen. Wenn das auch noch gewünscht ist, steigt der Aufwand auf n + m {n=namen.length; m=unique.length}
var namen = new Array("A und A", "B und B", "C und \n " + unescape("%D8") + " C", "E und E", "C und C", "D und D", "E und E", "C und \n " + unescape("%D8") + " C", "B und B");
var unique = new Array();
for(i=0;i<namen.length;i++) {
unique[namen[i]] = (unique[namen[i]])?unique[namen[i]]+";"+String(i):String(i);
}
for(name in unique) {
if (unique[name].indexOf(";") != -1)
alert(name + " kommt vor als Element " + unique[name]);
}
Das ist allerdings immer noch besser als meine Lösung. Wobei ich mir noch nicht sicher bin, ist die Frage, ob dieser Algorithmus allgemeingültig(für viele Programmiersprachen) ist, speziell, ob es immer möglich sein wird einen beliebigen String, mit allen möglichen Sonderzeichen, als Index eines assoziativen Arrays zu benutzen.
viele Grüße
Axel
Hallo,
Das ermittelt aber noch nicht, _welche_ Elemente mehrfach vorkommen. Wenn das auch noch gewünscht ist, steigt der Aufwand auf n + m {n=namen.length; m=unique.length}
wenn das Array zuerst sortiert wird muss nur noch jedes Element mit dem folgenden verglichen werden, und bei Bedarf werden nur die Doppel erfasst.
Grüsse
Cyx23