webForumDet fria alternativet

Jämföra 2 arrayer

2 svar · 267 visningar · startad av Peeer

PeeerMedlem sedan mars 20025 907 inlägg
#1

Hilfe!
Jag har två arrayer (arrTextID & arrNewsID) som båda innehåller 3 rader med IDnr och tidpunkt. Det jag vill göra är att jämföra tidpunkterna i de båda arrayerna och plocka ut de 3 senaste IDnr (ordnat efter tidpunkt). Jag vill dessutom se till så att samma IDnr INTE förekommer flera gånger.

arrTextID:
(0,0) = 25
(1,0) = 2003-01-12 14:15:12
(0,1) = 17
(1,1) = 2003-01-07 15:16:17
(0,2) = 18
(1,2) = 2002-05-07 01:12:24

arrNewsID
(0,0) = 14
(1,0) = 2003-02-28 15:16:19
(0,1) = 14
(1,1) = 2003-02-05 14:16:47
(0,2) = 15
(1,2) = 2003-01-06 17:15:13

Resultatet ska då bli:
14, 25, 17 (observera att 14 bara förekommer en gång)

Hoppas att något förstår vad jag vill göra och vet hur man gör.

nikoMedlem sedan juni 20022 599 inlägg
#2

Arrayer har inga inbyggda sorteringsfunktioner, det har däremot ADO:n.

Så om man vill få en gratis datumsortering så kan man ju slänga över arrayerna i ett temporärt Recordset:

Function GetLastThreeIds(inpArray1(),inpArray2())
    Set tmpRec = Server.CreateObject("ADODB.Recordset")
    tmpRec.Fields.Append "Id", 3 'adInteger
    tmpRec.Fields.Append "TimeStamp", 135 'adDBTimeStamp
    tmpRec.Open
    For i = LBound(inpArray1, 2) To UBound(inpArray1, 2)
        tmpRec.AddNew
        tmpRec("Id") = CInt(inpArray1(0, i))
        tmpRec("TimeStamp") = CDate(inpArray1(1, i))
    Next
    For i = LBound(inpArray2, 2) To UBound(inpArray2, 2)
        tmpRec.AddNew
        tmpRec("Id") = CInt(inpArray2(0, i))
        tmpRec("TimeStamp") = CDate(inpArray2(1, i))
    Next
    tmpRec.Sort = "TimeStamp DESC" 'Sortera på tid.
    tmpRec.MoveFirst
    Dim arrToReturn(2)
    arrToReturn(0) = tmpRec("Id")
    Do While arrToReturn(0) = tmpRec("Id") And Not tmpRec.EOF
        tmpRec.MoveNext	'Ignorera dubbletter
    Loop
    If Not tmpRec.EOF Then arrToReturn(1) = tmpRec("Id")
    Do While (arrToReturn(1) = tmpRec("Id") or arrToReturn(0) = tmpRec("Id")) And Not tmpRec.EOF
        tmpRec.MoveNext	'Ignorera dubbletter
    Loop
    If Not tmpRec.EOF Then arrToReturn(2) = tmpRec("Id")
    Set tmpRec = Nothing
    GetLastThreeIds = arrToReturn
end Function

sortedArray= GetLastThreeIds(arrTextID,arrNewsID)
response.write "Resultat: " & sortedArray(0) & " " & sortedArray(1) &   " "  & sortedArray(2)

Kanske lite "overkill" i det här fallet men sorteringen funkar ju på godtyckligt stora arrayer.

PeeerMedlem sedan mars 20025 907 inlägg
#3

Tack! Den verkar funka fint!

131 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)