C# Liste(Dizi)'yi Sayısal Sıralama

MikoBura

80+
Katılım
12 Ağustos 2020
Mesajlar
396
Reaksiyon skoru
167
Arkadaşlar C#'da okul benzeri bir sistem yapıyorum, sınıf ekleme sistemi yaptım ama eklenen sınıfları nasıl sıralayabilirim sayısal olarak?

Örneğin 10/B - 10/A - 9/C - 5/A - 6/C şeklinde girince;
5/A - 6/C - 9/C - 10/A - 10/C şeklinde sıralayacak.

Dizi olarak yazıp alfabetik sıralıyorum ama 1 - 10 - 11 - 12 - 2 - 3 şekilde sıralıyor.
 
sınıfları string değil array olarak oluştur. her sınıf ayrı bir array olsun. arrayin ilk elemanı int sınıf sayısı, ikinci elemanı sınıf harfi bu da string olsun ya da char da olabilir tek harf var çünkü. arrayin ilk elemanlarına göre sınıf sayılarını sıralarsın.sonra ikinci elemanlarına göre alfabetik sıralarsın.
 
Son düzenleme:
sınıfları string değil array olarak oluştur. her sınıf ayrı bir array olsun. arrayin ilk elemanı int sınıf sayısı, ikinci elemanı sınıf harfi bu da string olsun ya da char da olabilir tek harf var çünkü. arrayin ilk elemanlarına göre sınıf sayılarını sıralarsın.sonra ikinci elemanlarına göre alfabetik sıralarsın.
peki geri nasıl birleştireceğim :D
Mesajlar otomatik olarak birleştirildi:

Ben bir çözümünü buldum ama seni uyarmak istedim. Eğer isterseniz kendi çözümümüde yazabilirim merak edenler için.

Dediğin şeye göre şöyle olacak;

10/A - 9/A - 9/B - 11/A

9 9 10 11
A A A B
bu da birleşince

9/A - 9/A - 10/A - 11/B
 
peki geri nasıl birleştireceğim :D
Mesajlar otomatik olarak birleştirildi:

Ben bir çözümünü buldum ama seni uyarmak istedim. Eğer isterseniz kendi çözümümüde yazabilirim merak edenler için.

Dediğin şeye göre şöyle olacak;

10/A - 9/A - 9/B - 11/A

9 9 10 11
A A A B
bu da birleşince

9/A - 9/A - 10/A - 11/B
kullanıcıdan önce arrayin ilk deperini yani sayıyı sonra da ikinci değeri
peki geri nasıl birleştireceğim :D
Mesajlar otomatik olarak birleştirildi:

Ben bir çözümünü buldum ama seni uyarmak istedim. Eğer isterseniz kendi çözümümüde yazabilirim merak edenler için.

Dediğin şeye göre şöyle olacak;

10/A - 9/A - 9/B - 11/A

9 9 10 11
A A A B
bu da birleşince

9/A - 9/A - 10/A - 11/B
array e attığın zaman zaten birleşmiş olacak.kullanıcıdan sayı istedin.sonra harf istedin.aldığın değerleri array e koydun.Arrayin içinde [9 A] oldu.Bunu da ayrı bir arrayın içine attın.İkili olan şeyi.Tüm sınıfların içindeki arrayin bir elemanı oldu.Daha sonra bunları ekledikten sonra buble sort yapar sıralarsın.Kavraman başta zor gelebilir ancak sıra sıra gidersen zorlanmazsın.ilk arraye x dedik diyelim.x in içinde iki eleman var 9 ve A. Sonraki sınıf y sonraki z olsun.Hepsinin içinde 2 değer var.Bunları sırayla tüm sınıfların olduğu arraye attığını düşün [x y z] diye. Bunları sıralayacağın zaman.x y z nin ilk indislerini(içinde sayı olan) kıyasla sonra ikinci indislere(içinde harf olan) göre alfabetik sırala.aradaki / işaretine takılma onu printlerken araya string olarak eklersin.yoksa arada karıştırır ortalığı gereksiz.
 
Son düzenleme:
Kullanıcıdan 10/A şeklinde girdi alıyorum senin dediğini yapmak için split kullanmak gerekir ve dediğim hata oluşur. Neden ayrı ayrı isteyeyim ki daha basit hali varken?
Mesajlar otomatik olarak birleştirildi:

Sana yazdığım kodu basitinden bir anlatayım bir saniye.
Mesajlar otomatik olarak birleştirildi:

1642458659047.png


ListeyiSirala(true);
Dediğimizde sırasıyla olan adımlar;
İlk başta otoKontrol (otoSıralamaKontrol) açık mı diye bakıyor. Eğer açıksa checkBox tiklenmiş mi diye bakıyor.
Eğer ikisinden birisi açık değilse otoKontrol false mı diye bakıyor ve eğer iki şarttan birisine uyuyorsa (bu kısım boş zaten sonrası önemli) şunlar oluyor;
sinifSayiListe adında ListBox'ın Item sayısıyla aynı sayıda Index'i olan bir dizi oluşturuyor.

sinif isimli stringe atanacak şey sırasıyla ListBox'ın tüm itemleri yani sınıflar örneğin 10/B
sinifSayiListe'nin sırasıyla indexlerine atanacak şey ise sinif'ın "/" (slash)'dan önceki kısmı örneğin 10

Yani eğer listBox'daki itemler şu şekildeyse : 10/B - 9/B - 11/B
sinifSayiListe şu şekilde olacak: 10 - 9 - 11

Ardından built-in bir fonksiyon olan Array.Sort fonksiyonuyla listeyi sıralıyoruz.

Neden en başta bunu kullanmadın diyecek olursanız şöyle bir listeyi sıralamaya çalıştığımız zaman : 11/A - 1/B - 2/B - 11/ B - 10/B şöyle bir sorun oluyor; Bu listeye girdiğimiz değerler string değerler olduğu için büyük küçük sıralaması yapamıyor ve ilk haneye bakarak sıralama yapıyor. Bu yüzden çıktı şu şekilde oluyor;
Girdi: 11/A - 1/B - 2/B - 11/ B - 10/B
Çıktı: 1/B 10/B 11/A 11/B 2/B
ve haksızda değil çünkü ilk haneye baktığımızda 2, 1'den büyük.

Ama biz listeyi int'e çevirdiğimiz için büyük küçük sıralaması yapabiliyor.

Her neyse. Ardından listBox'ı temizliyor.

Şimdi burada ki kod neyin nesi diyecek olursanız şu şekilde;
Ben kullanıcıdan sınıfları 10, 9 şeklinde alıyorum. Ve 10/ yazıp sırasıyla A, B, C... şeklinde giriş yapıyorum.
E madem bizim zaten hazırda böyle bir fonksiyonumuz var o zaman bu sınıflara tekrardan şube verelim ve sıralanmış şeklide yeniden listBox'a ekleyelim.

Biraz uzun oldu evet :) , 20 dakikamı buna ayırdım şimdi işime geri dönüyorum :)
 
Son düzenleme:
test!
 
Geri
Top