30. juli 2007 - 12:59Der er
9 kommentarer og 2 løsninger
tjekke for dubletter i et array
Hej, Jeg vil lige høre om der er nogen som ligger inde med en function som tjekker for dubletter i et array. Jeg har et array med mellem 500 og 1000 værdier. Det hele er tal(int) værdier.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Denne kode skulle vist kunne bruges til at finde dem med i hvert tilfælde: -------------------------------- For i=LBound(arrNavn) To UBound(arrNavn) For j=LBound(arrNavn) To UBound(arrNavn) If j<>i And arrNavn(j)=arrNavn(i) Then 'tallet findes Response.Write "<p>"&j&": "&arrNavn(j)&"</p>"&vbCrLf End If Next Next -------------------------------
Eller kortere: ------------------------ For i=LBound(arrNavn) To UBound(arrNavn) For j=LBound(arrNavn) To UBound(arrNavn) If j<>i And arrNavn(j)=arrNavn(i) Then Response.Write "<p>"&j&": "&arrNavn(j)&"</p>" Next Next
Set d = CreateObject("Scripting.Dictionary") d.removeall d.CompareMode = 0 For Each item In anArray If Not d.Exists(item) Then d.Add item, item Next thekeys = d.keys Set d = Nothing RemDups = thekeys End Function ------------------------------------ Glem de andre koder og kald denne funktion med: RemoveDuplicates(arrNavn)
for i = 0 to ubound(ArrAnnonId) Response.Write ArrAnnonId(i) & ", " next
Response.Write "<hr>"
ArrAnnonId2 = RemoveDuplicates(ArrAnnonId)
for a = 0 to ubound(ArrAnnonId2) Response.Write ArrAnnonId2(a) & ", " next
Function RemoveDuplicates(ByVal anArray) Dim d, item, thekeys
Set d = CreateObject("Scripting.Dictionary") d.removeall d.CompareMode = 0 For Each item In anArray If Not d.Exists(item) Then d.Add item, item Next thekeys = d.keys Set d = Nothing RemDups = thekeys End Function %>
Og jeg får fejlen: Microsoft VBScript runtime error '800a000d'
function RemoveDuplicates(a) if IsArray(a) = false then a = split(a, ",") dim i, r for i = lbound(a) to ubound(a) - 1 if instr(r, a(i) & ",") = 0 then r = r & a(i) & "," next RemoveDuplicates = left(r, len(r) - 1) end function
' Funktionen kan bruges sådan her:
' 1) Du kan sende en STRENG til funktionen Response.Write "Resultatet af en streng: " Response.Write RemoveDuplicates("1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8") & "<br>"
' 2) Du kan sende en ARRAY til funktionen: Response.Write "Resultatet af en array: " Response.Write RemoveDuplicates( split("1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8",",") ) & "<br>"
Jeg smider lige et svar.. det kunne jo være at du kunne bruge funktionen, når den nu tager imod både strenge og arrays.. :-)
Jeg har testet med følgende værdier/kombinationer, som jeg kunne komme i tanke om.
- tomt streng - streng der ender med "," - streng der ikke ender med "," - array, via split af streng - null
Alle de ovennævnte muligheder virker som de skal.
Kan du/I komme i tanke om andre kombinationer?
<%
function RemoveDuplicates(ByVal a) if IsArray(a) = false then a = split(a & ",", ",") dim i, r for i = lbound(a) to ubound(a) - 1 if instr(r, a(i) & ",") = 0 then r = "" & r & a(i) & "," next RemoveDuplicates = left(r, len(r) - 1) end function
' Funktionen kan bruges sådan her:
' 1) Du kan sende en STRENG til funktionen Response.Write "Resultatet af en streng: " Response.Write RemoveDuplicates( "1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8" ) & "<br>"
' 2) Du kan sende en ARRAY til funktionen: Response.Write "Resultatet af en array: " Response.Write RemoveDuplicates( split("1,8,6,5,4,8,6,5,3,1,1,1,1,7,4,5,6,3,0,4,5,4,8,4,8", ",") ) & "<br>"
%>
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.