webForumDet fria alternativet

Kolla dubletter i en ArrayList

7 svar · 812 visningar · startad av Re-JeeP

Re-JeePMedlem sedan sep. 200642 inlägg
#1

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

BlixtsystemsMedlem sedan maj 2005713 inlägg
#2

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;
}
dAEkMedlem sedan feb. 20041 777 inlägg
#3

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().

Re-JeePMedlem sedan sep. 200642 inlägg
#4

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.

CompusaMedlem sedan jan. 20022 952 inlägg
#5

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 ?

dAEkMedlem sedan feb. 20041 777 inlägg
#6

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. ;)

Re-JeePMedlem sedan sep. 200642 inlägg
#7

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.

CompusaMedlem sedan jan. 20022 952 inlägg
#8

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

Genererad på 367 ms · cache AV · v20260730165559-full.f96bc7eb