Benzersiz Rastgele Sayılar Benzersiz Rastgele Sayılar (Unique Random Numbers) – Erkan Hacıoğlu | Microsoft.Net & Blackberry Developer


.Net 3.5

Published on Ekim 22nd, 2010 | by Erkan Hacıoğlu

0

Benzersiz Rastgele Sayılar (Unique Random Numbers)

Bir arkadaşımın projesi için gerekli oldu. Peki Nedir “Benzersiz Rastgele Sayılar” ?

Benzersiz Rastgele Sayılar : Aynı anda birden fazla rastgele ve benzersiz sayı üretmek için kullanılabilecek sayı dizisi olarak tanımlayabiliriz kısaca. Örnek olarak 1 den 5 e kadar sayılarınız var (1,2,3,4,5). Bunların içerisinden yine 5 sayıyı da her seferinde rastgele almak istiyorsunuz. (1,5,2,4,3)(5,2,3,1,4)(4,5,3,2,1) gibi

Normalde bu 5 sayı içerisinden sadece 1 tanesini almak isteseydiniz System.Random sınıfını kullanmak yeterli olacaktı. Ancak arka arkaya 5 tane rastgele üretmek istediğinizde (Randomize kullansanız bile) sayılar birbirini tekrar edecektir. Bunu engellemek için mevcut sayıların ve seçilen sayıların birer dizi oluşturmak, seçilen sayıları mevcut sayı dizisinden çıkarmaktır.

Biraz araştırmadan sonra şöyle bir fonksiyon ortaya çıkardım. Sizin de işinize yaraması dileği ile 🙂

Öncelikle sayfamızın en üstünde Private rand As New Random olarak random sınıfının bir örneğini üretelim.

[vbnet]
Public Function UniqueRandomNumbers(ByVal Count As Integer) As List(Of Integer)

Dim _allNumbers As New List(Of Integer)(Enumerable.Range(1, Count))
Dim _selectedNumbers As New List(Of Integer)

For i As Integer = 0 To Count – 1

‘ Mevcut numaralardan rastgele birinin indexini alalım
Dim index As Integer = rand.Next(0, _allNumbers.Count)

‘ Mevcut numaralardan yukarıda belirlediğimiz indexe denk gelen sayıyı kopyalayalım
Dim selectedNumber As Integer = _allNumbers(index)

‘ Ve seçtiğimiz numarayı seçilen numaralara ekliyoruz
_selectedNumbers.Add(selectedNumber)

‘ Seçilen numarayı tekrar seçilmemesi için mevcut numaralardan çıkaralım.
_allNumbers.RemoveAt(index)

Next

‘Döngü tamamlandığında geriye Integer tipinde bir list geri dönecektir.
Return _selectedNumbers

End Function
[/vbnet]

Fonksiyonu uygulama içerisinde kullanmak için bir döngü kurabilirsiniz. Ben Asp.net sayfasında kullandığım için şu hale getirdim.

[vbnet]
For Each i As Integer In UniqueRandomNumbers(10)

Response.Write(String.Format(“{0}<br>”, i.ToString))

Next
[/vbnet]

Faydalı olmalı dileği ile…

Tags:


About the Author

Kodlama dünyasına 2001 yılında adım atıp bir daha bu dünyadan çıkamayan, internetin oksijen, ekmek, su gibi olduğunu düşünen bir insan...



Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back to Top ↑