Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


vill inte ha dubbletter av slumpade nummer...

Postades av 2006-09-17 22:10:25 - Christian Otrel, i forum asp - allmänt, Tråden har 4 Kommentarer och lästs av 741 personer

Jag försöker skapa en dictionary variabel med slumpade tal.
Enda delenjag inte får att funka just nu är kontrollen av att det inte
finns dubletter. Jag är tacksam för tips.

Här är skriptet:

<%

Dim randomnumber
Dim DIClista
Set DIClista = CreateObject("Scripting.Dictionary")

Randomize


AntalImages = 20
MaxAntal = 20

for i=1 to AntalImages 'räkna så att vi får alla nummer i MaxAntal


'ta fram ett slump nummer
randomnumber = Int( Rnd * Maxantal ) + 1



'Här är kontrollen som inte funkar...

For j=0 to DIClista.Count
If DIClista(j) = randomnumber then

exit for
i = i - 1
Else
DIClista(i) = randomnumber
End If

Next



'testutskrift

response.write i & ", "
response.write DIClista(i) %> <br> <%


Next

%>


Svara

Sv: vill inte ha dubbletter av slumpade nummer...

Postades av 2006-09-18 23:06:42 - Andreas Hillqvist

Detta kanske är till hjälp:

Const Maxantal = 20
Const AntalImages = 20
Dim i
Dim randomnumber
Dim DIClista
    Set DIClista = CreateObject("Scripting.Dictionary")

    Randomize

    'räkna så att vi får alla nummer i MaxAntal
    For i = 1 To AntalImages
        'ta fram ett slump nummer
        Do
            randomnumber = Int(Rnd * Maxantal) + 1
        Loop While DIClista.Exists(randomnumber)
        DIClista.Add randomnumber, randomnumber
    Next

    'testutskrift
    For Each randomnumber In DIClista
        Response.Write randomnumber & ", <BR/>"
    Next


Din strategi för att slumpa tal garanterar inte terminering.

Om du har en mängd bilder, du vill ha en slumpvist vald delmängd av dessa bilder. Då bör du istället skriva:
Const Maxantal = 20
Const AntalImages = 100
Dim i, key
Dim randomnumber
Dim Result As Scripting.Dictionary
Dim DIClista As Scripting.Dictionary
    Set Result = CreateObject("Scripting.Dictionary")
    Set DIClista = CreateObject("Scripting.Dictionary")

    Randomize
    
    'Hämtar bilderna,
    'detta skall ersätt med databasanrop eller
    'listning av katalog
    For i = 1 To AntalImages
        DIClista.Add i, "C:\images\image" & i & ".jpg"
    Next
    

    'Hämtar slumpist valda bilder
    i = 0
    Do While i < Maxantal And DIClista.Count > 0
        'ta fram en nyckel för slumpvis vald bild
        randomnumber = Int(Rnd * DIClista.Count)
        key = DIClista.Keys(randomnumber)
        
        'Lägger till det i resultatet
        Result.Add key, DIClista.Items(randomnumber)
        
        'Inga dubbleter tillåtna,
        'Så vi tar bort det från urvalet
        DIClista.Remove key
    Loop

    'testutskrift
    For Each key In Result
        Debug.Print key, Result.Item(key)
    Next


Svara

Sv:vill inte ha dubbletter av slumpade nummer...

Postades av 2006-09-19 09:20:26 - Christian Otrel

Tack. Bra lösning du skrivit!! :)


Svara

Sv: vill inte ha dubbletter av slumpade nummer...

Postades av 2006-09-19 15:32:53 - Sven Åke Persson

Jag löser det genom att lägga upp en Array med Maxantal.
Jag sätter ett kryss i det fack som slumpades fram första gången.
Jag kollar arrayen varje gång och hoppar över om det står ett kryss
i det facket som slumpen drog, loopar vidare tills Maxantal uppnåtts.


Svara

Sv:vill inte ha dubbletter av slumpade nummer...

Postades av 2006-09-26 15:08:12 - Andreas Hillqvist

Problemet med en sådan lösning är mindre lediga nummer du har desto fler träffar kommer du ha mot din array. Till slut när du bara har en ledig plats kvar av t.ex. 10 000. Kommer sanolikheten att den slumpar ut en icke träffad 1/10 000.

Med andra ord den är mycket snabb i början. Men tar längre och längre tid. Teoretiskt kan väl slumpen te sig så att den sista aldrig träffas?

En annan strategi är att byta plats på två element i arrayen ett givet antal gånger. För att garanter att alla element bytt plats:

Function RandomData(Size)
Dim I
Dim Pos
Dim Temp
ReDim Data(1 To Size)
    'Fill Array with Data
    For I = 1 To Size
        Data(I) = I
    Next
    
    'Randomize order of the data
    For I = 2 To Size
        'Random number
        Pos = 1 + Int(Rnd * I)
                
        'Swaps the elements
        Temp = Data(I)
        Data(I) = Data(Pos)
        Data(Pos) = Temp
    Next
    
    'Returns Data
    RandomData = Data
End Function

Koden avser bara visa algoritmens struktur. Den är därför skriven i VB-Script där bara datatypen variant finns.

Denna koden garanterar terminering. Jag tror den dessutom är den är en av den effektivaste, då det gäller utnytjande av plats. Jag har svårt att värdera hur slumpmässig den är.



Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 170
27 953
271 705
1 409
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies