Sıralama işlemleri kodlamanın bel kemiğini oluşturur. Form sayfalarında kullanılan bazı nesnelerin içindeki değeleri sıralamak için Sort() metodundan yararlanılır. Ancak bu metod değerleri alfasayısal olarak sıralar. Nesnenin içindeki değerler sayı olduğunda bu metod işe yaramaz. Bu uygulamamızda rastgele 20 sayıyı ListBox nesnesine aktarıp sıralama işlemlerini gerçekleştireceğiz.
Form sayfasına bir adet ListBox ekleyelim. Formun Load olayına aşağıdaki kodları yazalım.
private void Form3_Load(object sender, EventArgs e)
{
Random rnd = new Random();
int sayi;
for (int i = 0; i < 20; i++)
{
sayi = rnd.Next(1, 1000);
listBox1.Items.Add(sayi.ToString());
}
}
Yukarıdaki kodları çalıştırdığınızda sayıların ListBox nesnesine eklendiğini görürsünüz. Bu nesneye ait Sorted() metodunu aşağıdaki gibi kullanalım.
listBox1.Sorted = true;
Ancak sayıların sıralanmadığını, daha doğrusu hatalı bir şekilde sıralandığını görürsünüz. Şimdi bu sıralama işlemlerini doğru bir şekilde gerçekleştirelim.
Standart dizi tanımlayarak sıralama işlemini gerçekleştirelim.
Random rnd = new Random();
int sayi;
int[] sayilar = new int[20];
private void Form3_Load(object sender, EventArgs e)
{
for (int i = 0; i < 20; i++)
{
sayi = rnd.Next(1, 1000);
sayilar[i] = sayi;
}
int ara;
for (int i = 0; i < 19; i++)
{
for (int j = i + 1; j < 20; j++)
{
if (sayilar[i] > sayilar[j])
{
ara = sayilar[i];
sayilar[i] = sayilar[j];
sayilar[j] = ara;
}
}
}
for (int i = 0; i < 20; i++)
{
listBox1.Items.Add(sayilar[i].ToString());
}
}
ArrayList koleksiyonundan yararlanarak sıralama işlemini gerçekleştirelim.
ArrayList q = new ArrayList();
foreach (object o in listBox1.Items)
q.Add(o);
q.Sort();
listBox1.Items.Clear();
foreach (object o in q)
{
listBox1.Items.Add(o);
}
List koleksiyonundan yararlanarak sıralama işlemini gerçekleştirelim.
Random rnd = new Random();
int sayi;
List<int> list = new List<int>();
private void Form3_Load(object sender, EventArgs e)
{
for (int i = 0; i < 20; i++)
{
sayi = rnd.Next(1, 1000);
list.Add(sayi);
}
list.Sort();
listBox1.DataSource = list;
}
Burada Sort işlemi yerine linq kodlarını kullanarak sıralama işlemini gerçekleştirebilirsiniz.
var sirala = from num in list
orderby num
select num;
foreach (var item in sirala)
{
listBox1.Items.Add(item.ToString());
}
Kodları aşağıdaki gibi de düzenleyebilirsiniz.
List<int> sirala = list.OrderBy(o =>Convert.ToInt32(o.ToString())).ToList();
foreach (var item in sirala)
{
listBox1.Items.Add(item.ToString());
}
Ya da linq kod yapısını kullanarak ListBox içindeki sayısal değerleri sıralama işlemini gerçekleştirebiliriz.
var list2 = listBox1.Items
.Cast<string>()
.OrderBy(x => Convert.ToInt32(x))
.ToArray();
listBox1.Items.Clear();
listBox1.Items.AddRange(list2);
|