18. september 2001 - 11:39Der er
10 kommentarer og 1 løsning
Unikt ID
Inden jeg bliver sindsyg og kyler min skærm ud af vinduet vil jeg da lige høre om der er en venlig sjæl der kan hjælpe mig.
Jeg har en Collection med X antal objekter. Nogle af disse objekter vil altid ligge i min Collection, mens andre bliver udskiftet med jævne mellemrum. For at kunne holde styr på hvert objekt har de alle fået tildelt en type og et ID. Type er generelt for en Class mens ID er unikt for hvert \"instance\" af et objekt.
Problemet er, at jeg skal kunne skabe et 100% unikt ID for hvert eneste objeck. Jeg prøvede i første omgang med en Long, som jeg lagde 1 til hver gang jeg lavede et nyt instance af et objekt (objektet fik så id \"#\" og et nummer) - men en Long kan kun være op til et vist tal og derefter vil der opstå en Overflow fejl eller noget lignende, så jeg er nød til at kunne genbruge et unikt id, så snart objektet der har dette id bliver fjernet fra min Collection.
Spørgsmålet er, hvordan laver jeg en uniqueID generator der er i stand til at genbruge et ID ?
Public Function CreateUniqueID() As String Static lUIDC As Long While InStr(1, myUniqueIDs, \"#\" & Hex(lUIDC) & \";\") > 0 lUIDC = lUIDC + 1 Wend myUniqueIDs = myUniqueIDs & \"#\" & Hex(lUIDC) & \";\" CreateUniqueID = \"#\" & Hex(lUIDC) & \";\" End Function
Public Sub ReleaseUniqueID(sUID As String) Dim lPos As Long Dim lEnd As Long lPos = InStr(1, myUniqueIDs, sUID) If lPos = 0 Then Exit Sub lEnd = InStr(lPos, myUniqueIDs, \";\") If lPos > 1 And lEnd < Len(myUniqueIDs) Then myUniqueIDs = Left(myUniqueIDs, lPos - 1) & Mid(myUniqueIDs, lEnd + 1) ElseIf lPos > 1 Then myUniqueIDs = Left(myUniqueIDs, lPos - 1) ElseIf lEnd < Len(myUniqueIDs) Then myUniqueIDs = Mid(myUniqueIDs, lEnd + 1) Else myUniqueIDs = \"\" End If End Sub
jeg ville foreslå et 2d array med en id i indgangens første felt og en \"on/off\" i feltets anden indgang så kan du hver gang du fjerner et objekt sætte dets id til \"off\" og vice verca..
giuggio97 > Jeg har lige testet din kode sådan her: Debug.Print Format(Now, \"yyyymmddhhmmss\") & Timer * 100 Debug.Print Format(Now, \"yyyymmddhhmmss\") & Timer * 100
jelzin101 > Har du et eksempel på dette ? Hvor meget ville det ca. optage i RAM\'en at have mulighed for at skabe 1000000 unikke IDs ? Hvor lang tid vil det tage at skabe unique ID nummer 1000000 ?
Min ID er basaret på at der findes kun et tal til år, måned, dag, time, min, sek og millisek. Problemet er at det er afhængig af hastigheden. Man kan bare løse det med et ekstra counter.
Kan du ikke tilføje en counter?
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.