2016-03-27 11 views
1

C# dilidir. "A e", "b d", "c c", "d b" ve "e a" adında beş dizinim var. Onlar aşağıdaki kodu yazdım çünkü alfabetik bir liste görüntülenir:Alfabetik sırayla adi Soyad

 string[] dirs = Directory.GetDirectories(@"C:\mainFolder\"); 
     foreach (string dir in dirs) 
     { 
      listBox1.Items.Add(Path.GetFileName(dir)); 
     } 

Onları isimlerinin ilk yarısının alfabetik sırada değil görünmesini istiyorum, ama ikinci yarısının alfabetik onların isimleri. Onların isimleri gelecekte değişebilir ve onlardan sonra bile isimlerinin ikinci yarısının alfabetik sıralarında kalmasına ihtiyacım var, ama endişelenmem gerekirse, her zaman ayrılan iki yarıya sahip olduklarını her zaman güvence altına alan kontrollerim var. tek bir boşluk, (adında izin verilen tek alan.) MSDN'yi araştırdım ve muhtemelen this method'a gereksinim duyduğum sonuca vardım, ancak bu bir dizi dize parçasına bölünmüş bir dizge gerektirir. Az önce açıkladığım sonuçları elde etmek için elimde olan diziyi nasıl kullanırdım? Bir şekilde ilk dizimi yeni diziye koymam gerekecek mi, tersi mi?

cevap

1

Sen bölünmüş (yer kalmamıştı anlamında), en az iki öğeler neden olmaması durumunda bu bir istisna durumu bu

string[] dirs = Directory.GetDirectories(@"C:\mainFolder\"); 
foreach (string dir in dirs.OrderBy(p => p.Split(' ')[1])) 
{ 
    listBox1.Items.Add(Path.GetFileName(dir)); 
} 

Not gibi LINQ en OrderyBy kullanabilirsiniz. Alternatif olarak, ilk yarıya bölünecek olan p.Split(new [] { ' ' }, 2)'u yalnızca ikinci yarının siparişte göz önünde bulundurmak istediğiniz boşlukları içerebileceği durumlarda kullanabilirsiniz.

+0

Aslında, bu mükemmel çalışır, kabul edilir ve teşekkür ederiz! –

1

Listeyi ve özel karşılaştırıcı kullanarak sıralamayı kullanabilirsiniz.

var dirs = new List<string>(Directory.GetDirectories(@"C:\mainFolder\")); 

dirs.Sort((x, y) => { 
    var lhs = x.Split(' '); 
    var rhs = y.Split(' '); 

    return lhs.LastOrDefault().CompareTo(rhs.LastOrDefault()); 

}); 

foreach(var dir in dirs){ 
    listBox1.Items.Add(Path.GetFileName(dir)); 
} 

Burada I (varsa) adının son kısmı dayalı sıralama listesinde olan özel karşılaştırıcı kullanılarak listesini ayırıyorum görebilirsiniz. Adlar boşlukla ayrılmış olsun ya da olmasın, indekslerden bağımsız sözcükler olsun, mükemmel bir şekilde çalışır.