Avatar billede loukas Mester
30. juli 2007 - 12:59 Der 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.
Avatar billede w13 Novice
30. juli 2007 - 13:06 #1
Hvad skal der gøres med dubletterne?

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
-------------------------------
Avatar billede loukas Mester
30. juli 2007 - 13:08 #2
Nå ja,
jeg vil gerne have fjernet dubletterne, sådan at der kun er én af hver ;-9
Avatar billede w13 Novice
30. juli 2007 - 13:08 #3
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
Avatar billede w13 Novice
30. juli 2007 - 13:14 #4
Så fandt jeg følgende på sitet
http://www.sourcecodesworld.com/source/show.asp?ScriptID=30:
--------------------------------------
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
------------------------------------
Glem de andre koder og kald denne funktion med: RemoveDuplicates(arrNavn)
Avatar billede nico26 Nybegynder
30. juli 2007 - 13:21 #5
jeg ville nok rette den nederste linie :)

...

    RemoveDuplicates = thekeys
End Function
Avatar billede erikjacobsen Ekspert
30. juli 2007 - 13:25 #6
Tilsvarende løsning på http://www.eksperten.dk/spm/788190
Avatar billede loukas Mester
30. juli 2007 - 13:38 #7
Hmm, det er lige sådan en jeg ledte efter
Men!?!?
Det vil ikke lige virke.

Koden:
<%
    strArr = "43659701,44561788,48293946,50911126,51021186,43659701,51013063,50971299,43659701"

    ArrAnnonId = split(strArr, ",")
   
   
    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'

Type mismatch: 'ubound'

/test.asp, line 16
Avatar billede loukas Mester
30. juli 2007 - 13:45 #8
Hov, ja
Det virker seføl'i når jeg retter den sidtste linie som nico26 siger ;-)

Tak for hjølpen!
Smid et svar,
så kaster jeg points tilbage--->
Avatar billede w13 Novice
30. juli 2007 - 14:03 #9
Svar er her! =)
Avatar billede thesurfer Nybegynder
30. juli 2007 - 15:44 #10
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.. :-)
Avatar billede thesurfer Nybegynder
30. juli 2007 - 16:02 #11
loukas>

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>"

%>
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester