Hej!
Jag vill kolla ifall en ArrayList har några dubletter.
Finns det ingen färdig metod för det?
Om inte hur gör jag snyggast för att kolla det?
Obs! listan innehåller strängar!
Mvh // Johan
7 svar · 812 visningar · startad av Re-JeeP
Hej!
Jag vill kolla ifall en ArrayList har några dubletter.
Finns det ingen färdig metod för det?
Om inte hur gör jag snyggast för att kolla det?
Obs! listan innehåller strängar!
Mvh // Johan
Mig veterligen finns det ingen inbyggd funktion.
Ett i min mening smidigt sätt att göra det på:
function removeDouble(arr) {
var o=new Object();
var i=arr.length;
var a=new Array();
var t=new String();
while(i--){
t=arr[i];
o[t]=t;
}
for(i in o){
a.push(o[i]);
}
return a;
}
Du skulle kunna konvertera om listan till ett Set. Eftersom ett Set inte kan innehålla dubletter är det bara att jämföra antalet element med listan. Vet ej om det är den snyggaste lösningen dock.
Om du vill kolla om ett element finns i listan innan det läggs till kan du kolla det mha contains().
dAEk skrev:
Du skulle kunna konvertera om listan till ett Set. Eftersom ett Set inte kan innehålla dubletter är det bara att jämföra antalet element med listan. Vet ej om det är den snyggaste lösningen dock.
Om du vill kolla om ett element finns i listan innan det läggs till kan du kolla det mha contains().
Det är precis så jag löser det nu. Tänkte om det fanns något bättre / snyggare sätt.
Men det är inte hela värden, det funkar ju trots allt.
dAEk skrev:
Om du vill kolla om ett element finns i listan innan det läggs till kan du kolla det mha contains().
Du skulle kanske med hjälp av contains som dAEk tippsade om, kunna göra en kontroll innan du lägger till element? På så vis eliminerar du dubbletterna att ens uppstå.
if (!myArrayList.contains(myObject)) {
myArrayList.add(myObject);
}
Men det kanske inte är applicerbart på ditt problem?
Är det så här du gör nu: http://www.devx.com/tips/Tip/20745 ?
Man bör även synchronisera (svengelska) i så fall annars kan man inte lita på att det fungerar.
Ett snyggare sätt vore att inte använda ArrayList öht i detta fall. ;)
Jag gjorde så att jag använde en HashSet och la till alla element i lisan.
if(temp.add(args.get(k)))
och sedan jämnförde temp med antalet element var i listan.
Tackar för alla tips.
dAEk skrev:
Man bör även synchronisera (svengelska) i så fall annars kan man inte lita på att det fungerar.
Ett snyggare sätt vore att inte använda ArrayList öht i detta fall. ;)
Sant och jag kom på mig själv att man totalt tappar poängen av att använda sig av en ArrayList om man inte tillåter dubbletter. :r