Ich will 2 Arrays vergleichen und es soll das gleiche drinnen sein, in welcher reihenfolge ist wurscht ^^
ich hab eine funktion (die von mir ist) aber irgendwie will ich sie verschnellern, btw. ich benutz mootools...
fals jemand auf die schnelle einen schnelleren algo weiss....immer her damit ^^
sooo sieht jetzt der Algo aus:
Array.implement({
/**
* compare - Returns true for equal Arrays
*
* @example
* [1,4,5,2,5].compare([4,5,1,5,2]) == true
* [1,4,5,2,5].compare([1,4,5,2,5},true) == true
* [1,4,5,2,5].compare([4,1,2,5,5},true) == false
* [1,3,2].compare([2,4,1]) == false
*
* @return {Boolean}
* @param {Object} Array
* {Boolean} Position Sensitiv
*/
compare: function(array,position) {
if(this.length != array.length) return false;
if(position) {
for(i = 0; i < this.length; i++) {
if(this[i] != array[i]) return false;
}
} else {
var contain = false;
for(i = 0; i < this.length; i++) {
for(y = 0; y < array.length; y++) {
if(this[i] == array[y]) {
array = array.unset(y);
contain = true;
break;
}
}
if(!contain) {
return false;
} else {
contain = false;
}
}
}
return true;
},
/**
* unset - Unsetting a element in the array by there Index
*
* @example
* [1,5,3].unset(1) == [1,3]
*
* @return {Object} Array
* @param {Object} Array
*/
unset: function(key) {
var buffer = new Array();
this.each(function(item,index){
if(key != index) {
buffer[buffer.length] = item;
}
});
return buffer;
},
});
Nur eine Idee für den Fall, dass position nicht true ist (drei Schritte sind nötig)
1) Die unset Funktion entfernt ein Element nicht nach dem Index sondern nach dem Wert (und zwar nur das erste Vorkommen)
2) In der compare Funktion erstellst du eine Kopie des ersten Arrays und entfernst mittels unset jeweils den aktuellen Wert aus der Kopie
3) Wenn die Kopie nach dem Durchlaufen des Arrays noch Elemente enthält, sind die Arrays nicht identisch
Viele Grüße,
xyz-141el
Quote
Original von xyz-141el
Nur eine Idee für den Fall, dass position nicht true ist (drei Schritte sind nötig)
1) Die unset Funktion entfernt ein Element nicht nach dem Index sondern nach dem Wert (und zwar nur das erste Vorkommen)
2) In der compare Funktion erstellst du eine Kopie des ersten Arrays und entfernst mittels unset jeweils den aktuellen Wert aus der Kopie
3) Wenn die Kopie nach dem Durchlaufen des Arrays noch Elemente enthält, sind die Arrays nicht identisch
Viele Grüße,
xyz-141el
die ideen sind gut, funktionieren aber nur bei eindimensionalen arrays...gut ich vergleiche hier nur eindimensionale...aber sobald ich ein multidimensionales array hab, krieg ich das problem in unset, weil ich dann den wert direkt vergleichen muss, und der wert kanan ja dann ein Array sein, welches sich in der Form wieder unterscheidet...wobei warte mal...ist ja egal, ist ja vom gleichen Array....
noja...mal durchdenken...
zu 2) bzw. 3)
das würde ja bedeuten, dass die Arrays eine unterschiedliche Anzahl von Elementen hat, was ja nicht sein kann, da dass vorher shcon aussortiert wird, muss ich ja garnicht mehr vergleichen.
oder versteh ich das jetzt grad falsch?
gruss xyz-161
Ich dachte es mir so, dass du die Arrays A und B dadurch vergleichst, dass du die Elemente von B aus A (oder einer Kopie von A) entfernst und nachdem alle Elemente entfernt wurden prüfst, ob noch Elemente in A vorhanden sind (das wären dann Elemente, die nicht in B wären). Falls ja sind die Arrays nicht gleich.
Davor bleibt natürlich die Prüfung, ob die Arrays eine gleiche Zahl von Elementen enthalten.
Den Vergleich mehrdimensionaler Arrays würde ich mit Rekursion nach dem gleichen Schema lösen.