Svish Skrevet 17. august 2007 Del Skrevet 17. august 2007 Noen som har en? Jeg fant private void Randomize<T>(ref List<T> list) { int count = list.Count; for (int i = 0; i < count; i++) { T tmp = list[i]; list.RemoveAt(i); list.Insert(random.Next(count), tmp); } } men virker ikke som den gjør noen særlig god jobb... listene den lager blir litt for lite tilfeldig... eller er det bare sånn det blir? Noen som kan se noe muffins med den? Lenke til kommentar
aadnk Skrevet 17. august 2007 Del Skrevet 17. august 2007 Det er nok et tilfelle av en dårlig implementert Knuth shuffle dette her, dessverre. Blant annet bytter du posisjoner med elementer en allerede har stokket (en kan stokke med seg selv, imidlertid), noe som vil gi et skjevt resultat. Dersom det er snakk om mange elementer, kan en også risikere at pseudotilfeldighetsgeneratoren simpelthen ikke har nok moduser til å muliggjøre alle premutasjoner. I så fall må man nok finne seg en bedre algoritme (her er noen i C#), eller anvende ekte tilfeldighet. Lenke til kommentar
Svish Skrevet 17. august 2007 Forfatter Del Skrevet 17. august 2007 Nemlig. Har justert den til private List<T> Randomize<T>(List<T> list) { List<T> n = new List<T>(list.Count); for (int i = 0; i < list.Count; i++) { int r = random.Next(list.Count); n.Add(list[r]); list.RemoveAt(r); } return n; } og ser ut til at den er litt bedre I hvert fall så holder det til mitt formål som er å stokke en liste med bilder. Fant dessuten en feil i koden min som gjorde at listen ble stokket først etter at jeg hadde vist det første bildet, noe som vil si at jeg alltid fikk det samme bildet først Ikke rart jeg synes det første bildet gikk litt igjen... tror kanskje det er på tide å legge seg Men takk for svar! Fant forøvrig også denne siden her som forklarte litt av det problemet du nevnte: http://www.boyet.com/Articles/SimpleShuffling.html Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå